如何阻止实体框架保存子对象
使用实体框架时,保存实体可能会无意中尝试保存关联的子实体。要纠正此问题并仅保留指定实体,请考虑以下方法:
使用 EntityState
您可以将子对象的 EntityState 设置为 Unchanged,通知实体框架保持不变:
using (var context = new DatabaseContext()) { context.Set<School>().Add(newItem); context.Entry(newItem.City).State = EntityState.Unchanged; context.SaveChanges(); }
利用外国键
更灵活的方法涉及利用外键。定义实体时,指定子实体上的外键属性和父实体上相应的主键属性:
public class City { public int Id { get; set; } public string Name { get; set; } } public class School { public int Id { get; set; } public string Name { get; set; } [ForeignKey("City_Id")] public City City { get; set; } [Required] public int City_Id { get; set; } }
在实体插入期间,显式设置子对象的外键属性并设置父对象的外键属性导航属性设置为 null:
public School Insert(School newItem, int cityId) { if (cityId <= 0) { throw new Exception("City ID not provided"); } newItem.City = null; newItem.City_Id = cityId; using (var context = new DatabaseContext()) { context.Set<School>().Add(newItem); context.SaveChanges(); } }
通过遵循这些技术,您可以控制子对象的持久性,确保仅保存所需的实体并防止潜在的完整性问题。
以上是如何防止实体框架在保存父实体时保存子实体?的详细内容。更多信息请关注PHP中文网其他相关文章!