C# 使用实体框架保存实体图
我正在使用EntityFramework 6编写数据访问层。我想要的是,当我在DbContext上调用C# 使用实体框架保存实体图,c#,.net,entity-framework-6,C#,.net,Entity Framework 6,我正在使用EntityFramework 6编写数据访问层。我想要的是,当我在DbContext上调用SaveChanges()方法时,它会将实体与通过导航属性关联的一组相关实体一起保存。下面是我正在尝试执行的简单代码 public class Customer { public long ID { get; set; } public string Name { get; set; } public virtual IEnumberable<PhoneNumbe
SaveChanges()
方法时,它会将实体与通过导航属性关联的一组相关实体一起保存。下面是我正在尝试执行的简单代码
public class Customer
{
public long ID { get; set; }
public string Name { get; set; }
public virtual IEnumberable<PhoneNumber> { get; set; }
}
public class PhoneNumber
{
public long ID { get; set; }
public string Number { get; set; }
}
public class SampleContext : DbContext
{
public virtual DbSet<Customer> Customers { get; set; }
public virtual DbSet<PhoneNumber> PhoneNumbers { get; set; }
}
using(var context = new SampleContext())
{
var customer = new Customer { ID = 1, Name = "John" };
customer.PhoneNumbers = new PhoneNumbers[]
{
new PhoneNumber { ID = 1, Number = "1.111.1111111" },
new PhoneNumber { ID = 2, Number = "1.111.1111112" }
}
context.Customers.Add(customer);
context.SaveChanges();
}
公共类客户
{
公共长ID{get;set;}
公共字符串名称{get;set;}
公共虚拟IEnumberable{get;set;}
}
公共类电话号码
{
公共长ID{get;set;}
公共字符串编号{get;set;}
}
公共类SampleContext:DbContext
{
公共虚拟数据库集客户{get;set;}
公共虚拟数据库集电话号码{get;set;}
}
使用(var context=new SampleContext())
{
var customer=新客户{ID=1,Name=“John”};
customer.PhoneNumbers=新电话号码[]
{
新电话号码{ID=1,Number=“1.111.1111111”},
新电话号码{ID=2,Number=“1.111.1111112”}
}
context.Customers.Add(客户);
SaveChanges();
}
上述代码将客户保存在customers表中,但不保存PhoneNumber表中的任何内容。奇怪,但找到了解决方案。上面的代码需要稍加修改才能正常工作。修改内容如下:
//In Customer class, changed following line:
public virtual IEnumberable<PhoneNumber> { get; set; }
//To:
public virtual ICollection<PhoneNumber> { get; set; }
//Then in using block initialized entities as follows:
using(var context = new SampleContext())
{
var customer = new Customer { ID = 1, Name = "John", PhoneNumbers = new List<PhoneNumber>() };
customer.PhoneNumbers.Add(new PhoneNumber { ID = 1, Number = "1.111.1111111" });
context.Customers.Add(customer);
context.SaveChanges();
}
//在Customer类中,更改了以下行:
公共虚拟IEnumberable{get;set;}
//致:
公共虚拟ICollection{get;set;}
//然后使用块初始化实体,如下所示:
使用(var context=new SampleContext())
{
var customer=new customer{ID=1,Name=“John”,PhoneNumbers=new List()};
customer.PhoneNumbers.Add(新电话号码{ID=1,Number=“1.111.1111111”});
context.Customers.Add(客户);
SaveChanges();
}
@Yanshof,该博客与众不同,导航属性的概念在该博客中完全被搞乱了。