使用实体框架保存实体图

时间:2014-07-27 04:12:34

标签: 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<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();
}

以上代码将客户保存在customers表中,但不会在PhoneNumbers表中保存任何内容。

1 个答案:

答案 0 :(得分:0)

奇怪但找到了解决方案。上面的代码需要一些修改才能使它工作。以下是修改:

 //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();
 }