我有三个相关的实体,最好用这张图来描述:
alt text http://thehashtable.com/wp-content/uploads/2010/01/Enttities.png
当我加载用户时,使用以下代码,User
对象被加载,即不为 null,而是 Role
和 Department
User
对象上的属性为空,尽管 User 数据库记录具有这些关联的有效 FK 值。
using (var productionEntities = new ProductionEntities())
{
var userName = GetUserName();
User u = (from usr in productionEntities.UserSet
where usr.UserName == userName
select usr).FirstOrDefault();
if (u == null)
{
throw new KpiSecurityException("No local database entry found for user.") { UserName = userName };
}
return u.Department.DeptName;
}
旁白:我完成了整个任务只是因为 ASP.NET MembershipProvider 不支持像部门这样的用户“元数据”,而且我也不得不使用 ProfileProvider,在巨大的数据库膨胀成本。
最佳答案
您必须显式加载此属性
User u = (from usr in productionEntities.UserSet
where usr.UserName == userName
select usr).FirstOrDefault();
if (u == null)
{
throw new KpiSecurityException("No local database entry found for user.") { UserName = userName };
}
if (!u.RoleReference.IsLoaded)
{ u.RoleReference.Load(); }
if (!u.DeparmentReference.IsLoaded)
{ u.DeparmentReference.Load(); }
或在您的查询中包含此实体
User u = (from usr in productionEntities.UserSet.Include("Role").Include("Department")
where usr.UserName == userName
select usr).FirstOrDefault();
关于c# - 关联属性未加载到实体上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2041556/