EF 一对一关系

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OneToOne
{
    class Program
    {
        static void Main(string[] args)
        {
            var model = new Model1();
            Man man = new Man
            {
                Name = "davie"
            };

            Person p = new Person { Name = "tt" };
            model.Persons.Add(p);
            man.Person = p;
            model.Mans.Add(man);

            model.Persons.Add(p);
            var i = model.SaveChanges();
            if (i > 0)
            {
                Console.WriteLine("输出成功");
            }
            else
            {
                Console.WriteLine("输出失败");
            }
        }
    }
}
namespace OneToOne
{
    using System;
    using System.Data.Entity;
    using System.Linq;

    public class Model1 : DbContext
    {
        //您的上下文已配置为从您的应用程序的配置文件(App.config 或 Web.config)
        //使用“Model1”连接字符串。默认情况下,此连接字符串针对您的 LocalDb 实例上的
        //“OneToOne.Model1”数据库。
        // 
        //如果您想要针对其他数据库和/或数据库提供程序,请在应用程序配置文件中修改“Model1”
        //连接字符串。
        public Model1()
            : base("name=Model2")
        {
        }

        public virtual DbSet<Person> Persons { get; set; }
        public virtual DbSet<Man> Mans { get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            //双向one to one
            //man的id不能是identity的
            modelBuilder.Entity<Man>()
                .HasRequired(a => a.Person)
                .WithOptional(a => a.Man)
                .WillCascadeOnDelete(true)
                ;
            // 单向one to one
            //modelBuilder.Entity<Person>()
            //    .HasOptional(x => x.Man).WithMany()
            //    .HasForeignKey(x => x.ManId);

            //// one to many Address - Person
            //modelBuilder.Entity<Man>()
            //    .HasRequired(x => x.Person).WithMany()
            //    .HasForeignKey(x => x.PersonId);
        }
    }

}
namespace OneToOne
{
    [Table("Person")]
    public class Person
    {
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int PersonId { get; set; }
        public string Name { get; set; }
        public virtual Man Man { get; set; }
    }
}

作者:spike

分类: Net

创作时间:2023-06-25

更新时间:2024-12-09

联系方式放在中括号之中例如[[email protected]],回复评论在开头加上标号例如:#1