【发布时间】:2011-07-26 04:10:50
【问题描述】:
我正在推出自己的身份验证系统,并且遇到了需要指导的情况。
我不首先使用 EF 4.1 代码。我将我的数据库设计为包含一个带有 Id、Email 和 HashedPassword 列的用户表。然后我让 EF 根据这个表创建一个实体。然后我创建了一个部分类来处理我的验证。
问题是,在我看来,我希望有一个用于电子邮件、密码和确认密码的文本框。我需要验证密码并确认密码(必需并比较)。我可以将这些添加到我创建的验证类中,但因为它们不是为 User 表创建的实体 EF 的一部分,所以当我尝试查看页面时会出现编译器错误。
我的部分课程
[MetadataType(typeof (UserMetadata))]
public partial class User
{
private class UserMetadata
{
[Required]
public string Email { get; set; }
[Required]
public string Password { get; set; }
[Required]
[Compare("Password")]
public string ConfirmPassword { get; set; }
}
}
我的看法
<h1>Sign Up</h1>
@using (Html.BeginForm("Create", "Users", FormMethod.Post))
{
@Html.ValidationSummary()
<p>
@Html.LabelFor(x => x.Email)<br />
@Html.TextBoxFor(x => x.Email)
</p>
<p>
@Html.LabelFor(x => x.Password)<br />
@Html.TextBoxFor(x => x.Password)
</p>
<p>
@Html.LabelFor(x => x.ConfirmPassword)<br />
@Html.TextBoxFor(x => x.ConfirmPassword)
</p>
<p class="button">
<input type="submit" value="Submit" /></p>
}
我的模型
表名称:用户 列:ID、电子邮件、HashedPassword
我该如何解决这个问题?
谢谢
【问题讨论】:
-
可能有助于了解它是如何实现的,以了解编译错误是如何发生的。
-
Vasile Bujac 是正确的。您应该创建一个仅用于视图的模型,而不是使用您的 DataModel。然后将属性从一个映射到另一个。这允许您拥有对用户可见的属性,这些属性可能不存在于数据库中,但被使用或映射到 DataModel 中的适当列。
标签: entity-framework asp.net-mvc-3