我无法理解,如何使用TryUpdateModel并同时保存MVC架构.
如果我没有弄错的话,使用datacontexts必须在模型中.所以,这样的代码
var db=new TestEverybody();//it is class, which was generated by EntityFramework
var currentTesting=db.Testing.(t => t.id == id).First();
Run Code Online (Sandbox Code Playgroud)
必须位于模型中,而不是控制器中,不是吗?
但TryUpdateModel用法的示例如下:
public ActionResult Edit(Testing obj)//Testing collection
{
var db = new TestEverybody();
var currentTesting=db.Testing.(t => t.id == obj.id).First();
TryUpdateModel(currentTesting);
db.SaveChanges();
return RedirectToAction("Index");
}
Run Code Online (Sandbox Code Playgroud)
这种方式不会打破MVC架构吗?我们在控制器中使用数据库,而不是在特殊的Model类中.
那么,在真实项目中使用TryUpdateModel的最佳方法是什么?
我正在将 .NET Core Web API 从 2.2 升级到 3.1。测试该ChangePasswordAsync功能时,我收到以下错误消息:
无法更新标识列“UserId”。
我运行了一个 SQL Profile,我可以看到 Identity 列不包含在 2.2 UPDATE 语句中,但它包含在 3.1 中。
有问题的代码行返回 NULL,而不是成功或错误,如下所示:
objResult = await this.UserManager.ChangePasswordAsync(objUser, objChangePassword.OldPassword, objChangePassword.NewPassword);
Run Code Online (Sandbox Code Playgroud)
的实现ChangePasswordAsnyc如下(为简洁起见,代码被截断)。
注意:AspNetUsers 扩展了 IdentityUser。
[HttpPost("/[controller]/change-password")]
public async Task<IActionResult> ChangePasswordAsync([FromBody] ChangePassword objChangePassword)
{
AspNetUsers objUser = null;
IdentityResult objResult = null;
// retrieve strUserId from the token.
objUser = await this.UserManager.FindByIdAsync(strUserId);
objResult = await this.UserManager.ChangePasswordAsync(objUser, objChangePassword.OldPassword, objChangePassword.NewPassword);
if (!objResult.Succeeded)
{
// Handle error.
}
return this.Ok(new User(objUser));
}
Run Code Online (Sandbox Code Playgroud)
在 …
c# entity-framework-core asp.net-core-identity .net-core-3.1
我正在使用ASP.NET MVC和Entity Framework.我有一个编辑人员网页,其中可以编辑人员的字段,然后在回发操作中,我使用以下代码.
var person = objectCtx.Persons.Where(s => s.Id == id).FirstOrDefault();
TryUpdateModel(person, form.ToValueProvider());
objectCtx.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
它很棒.但是在生成的SQL中,即使值没有更改,我仍然可以看到UPDATE语句.有没有办法在ASP.NET MVC或实体框架中避免这种情况?
我是新来Entity Framework的C#。
我的表中有一个计算列table1(示例)。我将根据其他列值计算计算列值。我不想Entity Framework在执行插入/更新操作时包括计算列。我怎样才能EF避免那个特定的列。但我想手动设置该特定列的值。
我搜索了相同的内容,但无法得到我的问题的答案。请帮助我,并提前致谢。