gpt4 book ai didi

c# - 正确使用 Entity Framework 生成的类(DB First Approach)

转载 作者:行者123 更新时间:2023-11-30 20:33:35 25 4
gpt4 key购买 nike

我正在开发我的第一个 MVC5 网站,碰巧这也是我第一次使用 ET。

我正在使用数据库优先方法。

例如,假设这些是我在用户表中的字段。

| Username | Email | Password | 

Entity Framework 为我生成了以下类:

class Users
{
public string Username { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}

现在假设我想创建一个注册 View 。此注册要求用户确认其密码。我是否像这样扩展现有的 ET 生成类?

class Users
{
public string Username { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public string ConfirmPassword { get; set; }
}

或者我自己制作一个完全不同的类,它将包含与 ET 生成的类分开的所有必要信息?

我是使用 ET 生成的类创建 View ,还是使用我自己的类?

我看到到处都提到 ViewModel,但我不太清楚它们的用途。

截至目前,我正在手动向 ET 类添加额外的字段,并且它有效,但我不知道我做错了还是做对了。

最佳答案

您不应为此类要求触及您的 Entity Framework 生成的代码。相反,您需要创建一个 View 模型来包含您希望在注册时从用户那里获取的字段。您可以创建一个 RegisterViewModel。然后比较这些属性,使用 Compare属性,与 ASP.NET MVC 默认项目模板中使用的完全一样。然后在 Controller 中,检查模型状态是否有效,使用发布的值创建一个 User 实体并保存在 db 中:

型号

public class RegisterViewModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }

[Required]
[StringLength(100,
ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }

[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password",
ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}

Action

// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new User() { UserName = model.UserName, /*... other fields */ };
// Save user
}

// If we got this far, something failed, redisplay form
return View(model);
}

关于c# - 正确使用 Entity Framework 生成的类(DB First Approach),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40070860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com