在我的实体框架、MVC 应用程序中,我使用的是 .Net Membership(我编写了一个自定义提供程序)。我的问题是:
- 如何最好地处理将用户附加到我创建的实体?
- 将导航属性附加到扩展 IPrincipal 的用户实体是否可以接受,还是应该保持“干净”?
目前,在我将新实体附加到用户的每个操作中,我首先必须查找用户。然后经常,因为我的用户没有导航属性,我需要进行第二次查询以从不同的 DbSet 获取结果?
如此简化,控制器可能看起来像:
public ActionResult Index() {
User u = UserRepository.FindById((int)Membership.getUser().ProviderUserKey);
List<OtherObject> oList = OtherRepository.FindByUser(u);
}
我想做的是:
public ActionResult Index() {
List<OtherObject> oList = provider.User.OtherObjectList;
// or
List<OtherObject> oList = Membership.GetUser().OtherObjectList;
}
但我不确定这对于我应该如何使用会员资格是正确的(用户只持有登录/帐户所需的信息。
最后一个问题,这就是我的会员用户目前是如何被退回的:
public override MembershipUser GetUser(string username, bool userIsOnline) {
User u = UserRepository.FindByUsername(username);
MembershipUser memU = null;
if (u != null) {
//
memU = new MembershipUser("MyMembershipProvider",
username, u.UserID, u.Email, string.Empty,
u.Comment, u.IsApproved, u.IsLockedOut, u.CreationDate,
u.LastLoginDate, u.LastActivityDate, u.LastPasswordChangeDate,
u.LastLockedOutDate);
}
return memU;
}
所以我查找用户并创建一个新的MembershipUser
,然后我用它来立即在控制器中再次查找用户 - 似乎有点多余,但这正是我应该做的吗?