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