我使用会员提供商指定用户中的必填字段,例如用户名和密码。然后,您可以继承此用户类,以使用您需要的任何其他字段创建自己的用户。
我添加了一个像这样的帐户
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和我的属性不存在于该类,但其他标量值被正确读取。
我能做些什么吗? 在这种特殊情况下,我可以让帐户跟踪它的管理员作为用户列表。所以我可以这样解决这个问题,但如果能解决这个问题,我仍然很好奇。
答案 0 :(得分:2)
这里的问题是,EF仅出于性能原因加载您告诉它的内容。您有两种方法可以加载远程导航属性,Eager加载(我的首选)或延迟加载。
通过Eager加载,您可以在查询时告诉EF您对特定的nav属性感兴趣,它会继续为您加载。要做到这一点:
using System.Data.Entity;
....
_context.Set<TUser>().Include(u=>u.AdminAccount).SingleOrDefault(u => u.Username == username);