这是对THIS的后续问题。
我有大约同样的问题,但解决方案对我来说不是 100% 有效。
我有如下查询:
item = db.Categories
.Include(i => i.AccessRight.Roles).Include(i => i.AccessRight.Permissions)
.Select(i => new ContentItemWithRevision<Category, ContentRevision>()
{
Item = i,
AccessRight = i.AccessRight,
Roles = i.AccessRight.Roles,
Permissions = i.AccessRight.Permissions,
Revision = i.Revisions.OrderByDescending(r => r.DateCreated).FirstOrDefault()
})
.FirstOrDefault(c => c.Item.Id == id);
和在选择中添加到“技巧”中的急切加载,因为查询中的AccessRight
sRoles
被忽略,因为我不查询. Permissions
Include
entity type
但这并不如我所愿。item.Item.AccessRight
由AccessRight = i.AccessRight
in加载,Select
并且可以在我的视图中使用,我只传入,但item.Item
不是(但正确加载)。
所以看起来这个“技巧”只适用于“一个级别”。item.Item.AccessRight.Roles
item.Item.AccessRight.Permissions
item.Roles
item.Permission
有没有办法解决这个问题?
现在有没有办法使用新版本的 EF 来完成这项Include
工作,因为这将是 IMO 的最佳解决方案?
或者我至少可以让“多层次”的技巧发挥作用吗?
我目前唯一可以工作的解决方案是不通过item.Item
,而是完整item
并使用item.Roles
而不是item.Item.AccessRight.Roles
,但这不是很直观(因为它在某些用途时崩溃,item.Item.AccessRight.Roles
因为他没有意识到问题)并且需要进行一些更改在我的整个申请中。
我也尝试过使用Include
after Select
,但这给了我一个例外,因为在Select
我没有 an之后entity type
。
也许对于我的基本问题还有一个完全不同的解决方案:
我只想选择我Category
的和最新Revision
的,而不是所有的修订(因为这些可能很多)。如果有没有我的自定义类型的解决方案,我也可以使用该解决方案。
更新:
这是我的数据库的简化模型:
所以有一个1:n
forCategory:Revisions
,1:1
forCategory:AccessRight
和n:m
forAccessRights:Roles
andAccessRights:Permissions
。
以下查询也可以,但获取所有修订,而不仅仅是最新的:
var category = db.Categories
.Include(i => i.AccessRight.Roles)
.Include(i => i.AccessRight.Permissions)
.Include(i => i.Revisions)
.FirstOrDefault(i => i.Id == id);