如何确定是否在未加载相关记录的情况下设置entity framework中的导航属性

我不确定EF 4中的导航属性,所以我会请你解释一下。

让我们想象一下这种情况:

一个)

我有两个实体AB ,其关系是N到N(多对多)和我的数据库AB 表以及带有两个外键的 AB

在这种情况下,EF创建一个导航属性,让我们称之为X ,也称为XReference

B)

我有两个实体AB ,其关系为1到N(一对多), 两个表在我的数据库AB 有一个外键

在这种情况下,EF创建一个导航属性,让我们称之为Y 但不是YReference

现在让我们采用场景A和B,并尝试找出B中是否有A的引用:

我的场景代码:

一个):

 bool isA = a.XReference.EntityKey != null; 

我没有加载B记录(对吗?)

B):

 bool isA = aBAny(x => x.BId == AId); 

我加载B记录

我的问题:

  • 为什么EF不创建YReference,我不能在场景B中使用EntityKey属性。
  • 在我的代码场景B中,我真的不加载B的任何记录吗?
  • 您是否知道更快速地运行此查询的方法?

谢谢你们的帮助,我希望我能说清楚:-)

这是一种检查实体的相关记录是否已加载的方法。

对于您有多个与实体相关的记录的实体,您可以像下面一样检查。(一对多的关系)

 myDbContext.Entry(MyEntity).Collection(x => x.NavigationalProperyName).IsLoaded 

如果只有一个与实体相关的记录,那么你可以检查如下。(一对一的关系)

 myDbContext.Entry(MyEntity).Reference(x => x.NavigationalProperyName).IsLoaded 

你的意思是:

 // -to-one relationship entity.RelatedItemReference.IsLoaded // -to-many relationship entity.RelatedItems.IsLoaded