我正在寻找在ASP.Net MVC3中创建自定义成员资格提供程序的过程,并且正在努力查看它们如何组合在一起...

我真的在寻找一些最佳实践方法来做到这一点。

我有一个用户模型(在我的数据库中代表一个用户表)。为了将其与MembershipProvider功能一起使用,此模型是否应继承MembershipUser?我不关心MembershipUser中的许多字段-这些字段是否必须在基础SQL表中才能起作用(显然,这似乎是多余的,因为我永远不会使用这些列?)

例如-我应该让我的模型像这样继承MembershipUser吗?

/// <summary>
/// Class representing a registered user based on the Users database table.
/// </summary>
public class User : MembershipUser
{
    public int Id { get; set; }
    //here I can access some other properties I will use which are already in MembershipUser...

    //Addtional properties I need specific to my app.
    public bool NotifyOfNewBlog { get; set; }
    public bool NotifyOfNewWallPosts { get; set; }
    //...plus many more.
}


在进一步使用Membership.GetUser()时,我是否每次都要将该对象强制转换回原始的User对象,以便能够访问其他属性?

这是我应该采取的方法吗?还是我先建立一个单独的User模型,然后再建立一个链接到数据库模型的CustomMembershipUser模型?

如果EF没有将所有MembershipUser列作为表中的对象存储,EF是否可以保存/更新/插入User模型?这是否甚至接近正确的方法?如您所见,我在这里有点挠头。

任何建议/想法/想法都非常感谢。

最佳答案

就继承MembershipUser对象而言,您可以做到这一点,并且在实现MembershipProvider时,只需将其转换为派生类型,但我个人不会这样做,仅因为您当时就受此更改的摆布类型破坏您的派生类型(尽管我猜想大多数框架都可以这样说)。相反,我会将这些附加值放入一个配置文件中,并滚动使用自己的ProfileProvider,(根据我的经验,不要使用Sql这是垃圾)。

“ MembershipUser中有许多我不关心的字段,这些字段是否必须在基础SQL表中才能起作用(显然,这似乎是多余的,因为我永远不会使用这些列?)”

如果要自己滚动,则无法将其保存在Db中。毕竟,您要实现MembershipProvider方法(GetUser等),因此您要根据传递给您的MembershipUser对象的操作来决定。您可以忽略它们,而不能验证或存储它们。

10-08 02:58