如何使用数据库表持久性正确继承 ASP.net 成员资格用户
本文关键字:net ASP 成员 用户 继承 数据库 何使用 持久性 | 更新日期: 2023-09-27 17:56:12
我正在使用自定义成员资格提供程序。我还使用继承和扩展 MemberUser 的成员资格类。
我的问题来自创建用户并保存到数据库。当我观察数据库时,我只找到具有正确数据的以下列。其余属性未在列中列出。
- 编号
- 测试
- 电子邮件
- 评论
- 已获批准
- 上次登录日期
- 上一个活动日期
发生了什么以及如何更正此问题以包含其余属性?
成员类如下所示:
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();
编辑。。。。。。。。。。。。
进一步的研究使我对MemberUser的定义与我所看到的功能之间的关系有了以下理解。
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 表中,因此以后无法对这些属性进行检索。由此,我确定我必须实施自己的坚持。如何在 MyMemberUser 模型中执行此操作而不与基类属性冲突?
为了快速测试,我尝试了以下内容但没有成功。 基地。密码问题是只读的。
public virtual string PasswordQuestion {
get {
return base.PasswordQuestion;
}
set {
base.PasswordQuestion = value;
}
}
我一定是在左边的领域旅行。如果这些值无法更新和存储,它们有什么用。总之,它们不在表中,我无法将它们放在那里,我无法更新它们,如果不走一些我确定不是初衷的支线,我就无法存储它们。
有人可以指出我正确的方向吗?
我终于想出了如何让它工作。我必须覆盖未存储在数据库中的获取/只读属性的获取/设置。然后,在构造函数中,将这些属性设置为传入值。
这就像重新实现整个类。 恕我直言,这使得 MemberUser 类很像一个接口,而不是实际上除了表示值之外什么都不做。再一次,恕我直言,我认为 MS 有点在 MVC 和 asp.net 的不同领域丢球。其中,只有用户名和密码的简单和基本用户基类。关于设计的等级制度和可重用性在哪里?也许是因为我对MVC和 asp.net 还很陌生。也许我只是被其他语言和库宠坏了。
无论哪种情况,我都找到了一个可行的解决方案。基本上继承会员用户。重写要保留在数据库中的 get 属性。为这些属性添加集。那些存储的(带有基本获取/设置)是好的。现在我有一个可以向下转换为 MemberUser 类型的类。