【发布时间】:2012-02-25 20:00:33
【问题描述】:
当我尝试从具有关系的数据库中检索实体,但实际上所有关系都为空时,EntityFramework 会使用空值填充关系,而不是将关系设置为空。
为什么会这样?有什么办法可以避免这种模式?
例子:
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”为空。
谢谢,
伊戈尔
【问题讨论】:
-
我很确定作为 Int32 的属性“property”不能为空。你怎么确定这是违规财产?
-
这当然不是标准模式。在类似的情况下,我得到 EntityCollections 的项目为零。您的代码是工作代码还是可以替代真实代码?如果是这样,也许您可以显示它发生的实际代码?
-
@dtryon,让我们假设,“属性”是 Int32。但这不是重点......如果数据库中不存在实体,为什么我可以访问“属性”?
-
@igor.araujo - 您可以访问它,因为它是 Int32,而不是可为空的 Int32。 Int32 不能为 null,因此在创建类时它必须包含一个值,该值将是默认值,即 0。
-
他的意思是不应该创建 entity.relationship。 IE。 entity.relationship == null(或应该),所以 entity.relationship.property 应该抛出一个空引用异常,因为当关系为空时,他将尝试访问关系的属性
标签: c# entity-framework code-first