给定以下模型(我正在使用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;}
}
尝试使用以下方法添加许多新PhoneNumbers
的新Person
时:
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
并运行另一个循环以手动将其进行操作,但我想知道是否有任何可以更有效地工作的实体框架中的标准解决方案。
实体框架不会自动将生成的ID(自动增量(关联到
PhoneNumbers
(导航属性(,因此,SQL Server并未保存PhoneNumbers
原因是不同的。这是因为设置 State
属性确实不是 cascade(dis 不是递归应用于相关数据(,因此不是替换相应的DbContext
/DbSet
方法的替代。
在您的情况下,而不是将State
设置为Added
,您应该调用Add
方法:
Person person = new Person {Name = "Jimmy"};
foreach(var phone in Phone_Number_In_Posted_Form){
person.PhoneNumbers.Add(new PhoneNumber {Number = phone});
}
Db.Add(person);
Db.SaveChanges();