鉴于以下模型(我正在使用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中的标准解决方案可以更有效地工作。
答案 0 :(得分:3)
实体框架不会自动将生成的Id(自动增量)与
PhoneNumbers
(导航属性)相关联,因此SQL Server不会保存PhoneNumbers
原因不同。这是因为设置State
属性不级联(不递归地应用于相关数据),因此不能替换相应的{{1} } / DbContext
方法。
在您的情况下,您应该调用DbSet
方法,而不是将State
设置为Added
:
Add