当前位置: 代码迷 >> .NET Framework >> Entity Framework一对多关系添加数据的两种形式
  详细解决方案

Entity Framework一对多关系添加数据的两种形式

热度:392   发布时间:2016-05-01 23:19:04.0
Entity Framework一对多关系添加数据的两种方式

 

当使用Entity Framework添加一对多关系数据的时候,通常先添加一的数据,然后再添加多的数据。类似这样:

 

//添加一的数据var category = new Category{Name="类别1"};category = context.Categories.Add(category);//添加多的数据for(var i = 0; i < 2; i++){    context.Products.Add(new Product{        Name = "产品" + i,        CategoryId = category.Id});}context.SaveChanges();

 

以上,我们对Category和Product分别进行了Add操作,然后统一SaveChanges。是否可以对Category的Products属性赋值,只对Catetegory进行Add,然后SaveChanges呢?

也就是按如下:

 

var category = new Category{Name="类别1"};for(var i = 0; i < 2; i++){    category.Products.Add(new Product{        Name="产品" + i,        Category = category    });}context.Categories.Add(category);context.SaveChanges();

 

那就验证下。

来两个一对多关系的领域模型。

 

    public class Product    {        public int Id { get; set; }        public string Name { get; set; }        public int CategoryId { get; set; }        public virtual Category Category { get; set; }    }    public class Category    {        public int Id { get; set; }        public string Name { get; set; }        public virtual ICollection<Product> Products { get; set; }        public Category()        {            Products = new List<Product>();        }    }

 

创建上下文:

 

    public class EFTestContext: DbContext    {        public EFTestContext() : base("conn")        {        }        public DbSet<Category> Categories { get; set; }     }

 

配置连接字符串:

 

  <connectionStrings>    <add name="conn"       connectionString="Data Source=.;User=YourUsername;Password=YourPassword;Initial Catalog=EFTest;Integrated Security=True"       providerName="System.Data.SqlClient"/>  </connectionStrings>  

 

客户端程序:

 

        static void Main(string[] args)        {            using (var context = new EFTestContext())            {                var category = new Category                {                    Name = "产品类别3"                };                                for(var i=0;i<2;i++)                {                    category.Products.Add(new Product {                        Name = "产品" + i,                        //Category = category                        CategoryId = category.Id                    });                }                context.Categories.Add(category);                context.SaveChanges();            }            Console.WriteLine("运行结束");            Console.ReadKey();        }

 

运行成功。



总结:当使用Entity Framework添加一对多关系数据的时候,我们通过给一的集合属性赋值,只context.代表一的表s.Add(代表一的实例),也同样可以在数据库中为代表多的那个表添加数据。并且,代表多的那个DbSet不设置也行。

 

  相关解决方案