保存实体时也保存导航数据

时间:2017-05-01 11:02:12

标签: entity-framework entity-framework-core

鉴于以下模型(我正在使用EF Core):

public class Person {
   public Person(){
         PhoneNumbers = new HashSet<PhoneNumber>();
   }
   public int Id {get; set;}
   public String Name {get; set;}
   public virtual ICollection<PhoneNumber> PhoneNumbers { get; set; }
}
public class PhoneNumber {
    public int Id {get; set;}
    public String Number {get; set;}
    public int PersonId {get; set;}
}

尝试使用以下方法添加包含许多新Person的新PhoneNumbers时:

 Person person = new Person {Name = "Jimmy"};
 foreach(var phone in Phone_Number_In_Posted_Form){
     person.PhoneNumbers.Add(new PhoneNumber {Number = phone});
 }
 Db.Entity<Person>(person).State = EntityState.Added;
 Db.SaveChanges();

实体框架不会自动将生成的Id(自动增量)与PhoneNumbers(导航属性)相关联,因此SQL Server不会保存PhoneNumbers。虽然这可以通过获取生成的Id并运行另一个循环来手动关联它来解决,但我想知道是否有任何内置于Entity Framework中的标准解决方案可以更有效地工作。

1 个答案:

答案 0 :(得分:3)

  

实体框架不会自动将生成的Id(自动增量)与PhoneNumbers(导航属性)相关联,因此SQL Server不会保存PhoneNumbers

原因不同。这是因为设置State属性级联(递归地应用于相关数据),因此不能替换相应的{{1} } / DbContext方法。

在您的情况下,您应该调用DbSet方法,而不是将State设置为Added

Add