c# - 关联属性未加载到实体上

标签 c# .net entity-framework

我有三个相关的实体,最好用这张图来描述:

alt text http://thehashtable.com/wp-content/uploads/2010/01/Enttities.png

当我加载用户时,使用以下代码,User 对象被加载,即不为 ​​null,而是 RoleDepartment 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/

相关文章:

entity-framework - LiteDB 的 Entity Framework 数据提供者

c# - 如何在 If 语句中包含 HTML

c# - Thread.Join(int) 在 C# 中的指定超时后不终止线程

c# - 如何在 C# 中在运行时动态创建和命名对象?

c# - LINQ to Entities 无法识别方法 'System.TimeSpan Subtract(System.DateTime)' 方法

c# - Entity Framework 4 使用外键在 WinForms 组合框中进行数据绑定(bind)

c# - 可以在 Visual Studio 中使用 WSDL 自动生成代码

java - 通过 TCP java (Android)/C# 进行私钥加密

c# - 核心库的异常架构

.net - 使用 Icon.ExtractAssociatedIcon 和 ImageList 获取完整质量的 16 x 16 图标