0

在我的实体框架、MVC 应用程序中,我使用的是 .Net Membership(我编写了一个自定义提供程序)。我的问题是:

  1. 如何最好地处理将用户附加到我创建的实体?
  2. 将导航属性附加到扩展 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,然后我用它来立即在控制器中再次查找用户 - 似乎有点多余,但这正是我应该做的吗?

4

0 回答 0