【发布时间】:2016-05-06 10:40:11
【问题描述】:
我已经使用 THP 实现了具有简单继承的代码优先数据库架构:
我需要查询所有类型的所有通知。
NotificationUser 表中的TargetUser 属性是一个关联。
我正在尝试执行下一个代码:
var notifications = _context.Notifications;
foreach (var notification in notifications)
{
Debug.WriteLine((notification is NotificationUser)? ((NotificationUser) notification).TargetUser?.Name : "-");
}
在数据库属性TargetUser 设置为正确的外键,但在代码中我没有得到任何结果。延迟加载已启用。
是否可以用户急切加载?我已经尝试写 _context.Notifications.Include('TargetUser') 字节它会引发异常。
更新。例外是:
A specified Include path is not valid. The EntityType 'Core.Concrete.NotificationBase' does not declare a navigation property with the name 'TargetUser'.
尝试将this answer修改为:
var notifications = _context.Notifications.OfType<NotificationUser>()
.Include(n => n.TargetUser)
.Cast<NotificationBase>()
.Union(_context.Notifications.OfType<NotificationPlace>()
但仍然抛出相同的异常。
【问题讨论】:
-
Not working context.Notifications.Include('TargetUser') 看起来有一些一般性错误。你说有例外?我可以看看吗?
-
@AlexanderHaas,尝试再次使用 include 执行代码,并且属性已正确加载。好像我有一些语法错误。还是谢谢!
-
@AlexanderHaas,好的,它不起作用。我在查询中没有注意到 .OfType
() 。没有它会引发异常。用消息更新问题。 -
这个问题和这个一样 => stackoverflow.com/questions/27623637/…
-
您包含一个属性 (
TargetUser),然后您尝试将检索到的实体转换为没有包含属性的类型。所以确实它在那里抛出了一个异常,正常的行为。
标签: c# entity-framework tph