C# 如何使用DB表持久性正确继承ASP.net成员身份用户

C# 如何使用DB表持久性正确继承ASP.net成员身份用户,c#,asp.net-mvc,C#,Asp.net Mvc,我正在与一家定制会员提供商合作。我还使用了一个继承和扩展MembershipUser的成员类 我的问题来自创建一个用户并保存到数据库。当我观察数据库时,我只发现以下列有正确的数据。列中未列出其余属性 身份证 试验 电子邮件 评论 我同意 拉斯洛金代特酒店 最后活动日期 发生了什么,我如何纠正这一点以包括剩余的属性 membership类如下所示: public class MyMembershipUser : MembershipUser { public MyMembershipUser(st

我正在与一家定制会员提供商合作。我还使用了一个继承和扩展MembershipUser的成员类

我的问题来自创建一个用户并保存到数据库。当我观察数据库时,我只发现以下列有正确的数据。列中未列出其余属性

  • 身份证
  • 试验
  • 电子邮件
  • 评论
  • 我同意
  • 拉斯洛金代特酒店
  • 最后活动日期
  • 发生了什么,我如何纠正这一点以包括剩余的属性

    membership类如下所示:

    public class MyMembershipUser : MembershipUser
    { public MyMembershipUser(string providerName,
                string name,
                Object providerUserKey,
                string email,
                string passwordQuestion,
                string comment,
                bool isApproved,
                bool isLockedOut,
                DateTime creationDate,
                DateTime lastLoginDate,
                DateTime lastActivityDate,
                DateTime lastPasswordChangedDate,
                DateTime lastLockoutDate) :
            base(providerName, name, providerUserKey, email,
                    passwordQuestion, comment,
                    isApproved, isLockedOut,
                    creationDate, lastLoginDate,
                    lastActivityDate, lastPasswordChangedDate,
                    lastLockoutDate)
        {
        }
    
        [Key]
        public int Id { get; set; }
    
        public string test { get; set; }
    }
    
    :
    
    我的创作如下:

    MyMembershipUser usr = new MyMembershipUser(.......);
    dbcontext.users.Add(usr);
    dbcontext.SaveChanges();
    
    编辑

    进一步的研究使我对MembershipUser的定义和我所看到的功能之间的关系有了如下的理解

    email                   -   virtual get; set    -  Stored in DB
    comment                 -   virtual get; set    -  Stored in DB
    isApproved              -   virtual get; set    -  Stored in DB
    lastLoginDate           -   virtual get; set    -  Stored in DB
    lastActivityDate        -   virtual get; set    -  Stored in DB
    Username                -   virtual get         -  Not Stored
    providerName            -   virtual get         -  Not Stored 
    providerUserKey         -   virtual get         -  Not Stored
    passwordQuestion        -   virtual get         -  Not Stored
    isLockedOut             -   virtual get         -  Not Stored
    creationDate            -   virtual get         -  Not Stored
    lastPasswordChangedDate -   virtual get         -  Not Stored
    lastLockoutDate         -   virtual get         -  Not Stored
    
    在构造函数之后,所有的值都被初始化并可用,因此基类中有一些存储空间;但是,由于其中一些属性不在DB表中,因此以后无法对这些属性进行检索。由此,我确定我必须实现我自己的持久性。如何在MyMembershipUser模型中做到这一点而不与基类属性冲突

    为了快速测试,我尝试了以下方法,但没有成功。base.PasswordQuestion是只读的

    public virtual string PasswordQuestion {
        get {
            return base.PasswordQuestion;
        }
        set {
            base.PasswordQuestion = value;
        }
    }
    
    我一定是在左外野旅行。如果不能更新和存储这些值,它们有什么好处。总之,它们不在表中,我不能把它们放在那里,我不能更新它们,我不能存储它们而不进行一些我确定不是最初意图的旁道


    有人能给我指出正确的方向吗。

    我终于想出了如何让它工作起来。我必须重写数据库中未存储的get/read-only属性的get/set。然后,在构造函数中,将这些属性设置为传入值

    这就像重新实现整个类。IMHO,这使得MembershipUser类更像一个接口,而不是只表示值。再说一次,我认为微软在MVC和asp.net的不同领域都有点失算。其中是简单而基本的用户基类,只有用户名和密码。关于设计,人们极力鼓吹的层次结构和可重用性在哪里。也许是因为我对MVC和asp.net还相当陌生。也许我只是被其他语言和图书馆宠坏了


    无论哪种情况,我都找到了一个可行的解决方案。基本上继承成员身份用户。重写要保留在DB中的get属性。添加这些属性的集合。那些被存储的(使用基本get/set)是按原样存储的。现在我有了一个可以向下转换为MembershipUser类型的类。

    我不确定我是否遵循。据我所知,您已将MembershipUser扩展为包含两个附加字段:“Id”和“test”。你是说这两个字段不是基础数据库表的一部分吗?不是。它们出现在数据库中。请参见编号列表(上面),其中包含确实出现的字段。MembershipUser中还有其他字段未显示。我不明白是什么阻止了继承字段的出现。我不知道如何让它们出现。你如何获得值来设置构造函数中的属性值?您是否从数据库中单独检索
    Aspnet\u成员资格
    记录?