zoukankan      html  css  js  c++  java
  • 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不设置也行。

  • 相关阅读:
    Struts2总结
    自动数据表格JQuery
    OGNL表达式介绍
    Struts2重定向
    struts2异常记录--java.lang.IllegalStateException
    WEB相关文件的加载顺序
    js如何获取select下拉框的value以及文本内容
    小知识点
    DOM文档对象总结
    圆桌聚餐(cogs 729)
  • 原文地址:https://www.cnblogs.com/darrenji/p/5237465.html
Copyright © 2011-2022 走看看