您的位置:首页 > 其它

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

2016-03-03 10:06 429 查看
当使用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不设置也行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: