为什么EF用空值填充数据库中不存在的实体
本文关键字:不存在 实体 数据库 填充 EF 空值 为什么 | 更新日期: 2023-09-27 18:25:59
当我试图从具有关系的数据库中检索实体,但实际上所有关系都为null时,EntityFramework会用null值填充关系,而不是将关系设置为null。
为什么会发生这种情况?有什么办法可以避免这种模式?
示例:
public class Entity{
public Int32 ID {get;set;}
public Relationship relationship {get;set;}
}
public class Relationship{
public Int32 ID {get;set;}
public Int32 property {get;set;}
}
如果我尝试,在数据库中没有关系:
Entity entity = context.entities.Include("relationship").SingleOrDefault( e => e.ID == id);
我可以在不触发NullReferenceException的情况下访问entity.relationship,但属性"property"为null。
谢谢,
Igor
这里的问题是您并没有真正展示整个故事。为了有一个Relationship
导航属性,必须存在一个为该关系提供关键字的ID。所以你的课必须看起来像这样:
public class Entity{
public Int32 ID {get;set;}
public Int32? RelationshipID {get; set;}
public Relationship relationship {get;set;}
}
如果RelationshipID不为null,则会创建一个Relationship对象。如果RelationshipID的值与实际数据项不对应,则这是一个错误,应该引发异常。
若RelationshipID为null,那个么relationship也将为null。
例外情况是,当它是1对多时,在这种情况下,它将是一个ICollection,关系不会为null,但它将是空集合,并且不会有RelationshipID(ID将保存在相关项中)。
如果没有某种钥匙,你就无法建立一段关系。