如何确定是否在未加载相关记录的情况下设置entity framework中的导航属性
我不确定EF 4中的导航属性,所以我会请你解释一下。
让我们想象一下这种情况:
一个)
我有两个实体A
和B
,其关系是N到N(多对多)和我的数据库A
和B
树表以及带有两个外键的 AB
。
在这种情况下,EF创建一个导航属性,让我们称之为X
,也称为XReference
。
B)
我有两个实体A
和B
,其关系为1到N(一对多), 两个表在我的数据库A
和B
有一个外键 。
在这种情况下,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