0

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

我像这样添加了一个帐户

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 为空。

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

有什么我可以做的吗。在这种特殊情况下,我可以让帐户作为用户列表来跟踪它的管理员。所以我可以通过这种方式解决这个问题,但我仍然很好奇这是否可以通过其他方式解决。

4

1 回答 1

2

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

通过急切加载,您在查询时告诉 EF 您对特定的导航属性感兴趣,它会继续为您加载它。去做这个:

using System.Data.Entity;

....

_context.Set<TUser>().Include(u=>u.AdminAccount).SingleOrDefault(u => u.Username == username);
于 2013-06-11T20:11:35.063 回答