使用父类获取时填充导航属性

时间:2013-06-11 20:02:41

标签: entity-framework entity entity-framework-5

我使用会员提供商指定用户中的必填字段,例如用户名和密码。然后,您可以继承此用户类,以使用您需要的任何其他字段创建自己的用户。

我添加了一个像这样的帐户

public Account AdminAccount { get; set; }

当我现在让我的用户使用membershipprovider时,它会这样做:

return _context.Set<TUser>().SingleOrDefault(u => u.Username == username);

此成员资格类的类定义如此

public class FlexMembershipUserStore<TUser> 
    : IFlexUserStore
        where TUser: class, IFlexMembershipUser, new()     

所以我在创建它时发送我的用户类,并且该类知道Tuser作为IFlexMembershipUser。

然而,IFlexMembershipUser没有我的AdminAccount属性,只有继承自IFlexMembershipUser的类具有该属性。 因此,当我获取用户时,即使他在数据库中有一个名为AdminAccount_Id的字段,如果设置正确,我只能将AdminAccount设为null。

我看到问题当然是成员资格只看到IFlexMembershipUser和我的属性不存在于该类,但其他标量值被正确读取。

我能做些什么吗? 在这种特殊情况下,我可以让帐户跟踪它的管理员作为用户列表。所以我可以这样解决这个问题,但如果能解决这个问题,我仍然很好奇。

1 个答案:

答案 0 :(得分:2)

这里的问题是,EF仅出于性能原因加载您告诉它的内容。您有两种方法可以加载远程导航属性,Eager加载(我的首选)或延迟加载。

通过Eager加载,您可以在查询时告诉EF您对特定的nav属性感兴趣,它会继续为您加载。要做到这一点:

using System.Data.Entity;

....

_context.Set<TUser>().Include(u=>u.AdminAccount).SingleOrDefault(u => u.Username == username);