gpt4 book ai didi

c# - EF add 没有添加到数据库

转载 作者:行者123 更新时间:2023-11-30 14:44:46 24 4
gpt4 key购买 nike

我想在我的应用程序中注册新用户,所以我有以下组件:注册模型

public class RegisterModel
{
[Required]
public string Login { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
[Required]
[DataType(DataType.Password)]
[Compare("Password", ErrorMessage = "Passwords doesn't match")]
public string PasswordCompare { get; set; }
[Required]
public int Tier { get; set; }
}

连接到表单

<form asp-antiforgery="true" method="post" role="form">
<div class="validation" asp-validation-summary="ModelOnly"></div>
<div class="form-group">
<label for="Login">Login:</label>
<div>
<input required asp-for="Login" type="text" name="Login" value="@Model?.Login">
</div>
</div>
<div class="form-group">
<label asp-for="Password">Password</label>
<input asp-for="Password" type="password" />
<span asp-validation-for="Password" />
</div>
<div class="form-group">
<label asp-for="PasswordCompare">Confirm password</label>
<input asp-for="PasswordCompare" type="password" />
<span asp-validation-for="PasswordCompare" />
</div>
<div class="form-group">
<label for="Tier">Tier of access:</label>
<div>
<input required asp-for="Tier" type="number" name="Tier" value="@Model?.Tier">
</div>
</div>
<div class="form-group">
<input type="submit" value="Create" />
</div>
</form>

我的数据库中代表用户的表

CREATE TABLE [dbo].[AdministratorUsers] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Login] NVARCHAR (MAX) NOT NULL,
[PasswordHash] NVARCHAR (MAX) NOT NULL,
[Tier] INT NOT NULL,
CONSTRAINT [PK_AdministratorUsers] PRIMARY KEY CLUSTERED ([Id] ASC)
);

和类实体

public class AdministratorUser
{
[Key]
public int Id { get; set; }
public string Login { get; set; }
public string PasswordHash { get; set; }
public int Tier { get; set; } = 0;
}

以及将注册模型改造成用户实体并保存到数据库的 Action 。

[HttpPost("accounts/create", Name = "AdminAccountCreate")]
public async Task<IActionResult> Create([FromServices] IGenPasswordHash genPassHash, RegisterModel regModel)
{
string passwordHash = genPassHash.GenerateHash(regModel.Password);

await db.AdministratorUsers.AddAsync(new AdministratorUser
{
Login = regModel.Login,
PasswordHash = passwordHash,
Tier = regModel.Tier
});
return RedirectToAction("Accounts");
}

但不知何故它不起作用。我已经修复了我能找到的所有潜力,这是我能够提供的最清晰的版本。

最佳答案

您需要在添加实体后提交更改。为此,您可以针对具体情况编写 db.AdministratorUsers.SaveChanges()

编辑: .AddAsync() 似乎没有做这样的事情(参见编辑修订)。如果我深入了解异步操作与正常操作有何不同,我将继续对此进行调查并编辑此答案。从本质上讲 - 如果您正在添加一个巨大的对象并且不介意必须等待对象被添加,为了让有问题的线程完成用户的请求,您不应该使用异步。但是如果你不依赖于它,如果你允许一个单独的线程为你处理那个操作,而发送请求的客户端得到一个“好的”,一切都已成功解决,或者通过做其他同时执行任务,选择 .Async 变体。

我认为它在这些行中做了一些事情的原因是因为我使用了 .SaveChangesAsync() 一次,它添加了我的对象有 5 秒的延迟,而没有 Async 它这样做没有任何中断.我的应用程序严重依赖于在发出的用户请求结束时添加到数据库中的对象,因此我再也没有尝试过。

关于c# - EF add 没有添加到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57621878/

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