我有一个 Asp.Net Core 2.2 应用程序。我编写了几个新的 Razor 页面来将一些新数据更新到现有模型。
问题是当我“提交”我的表单并调用 SaveChangesAsync() 时,它会更新我更改的字段......并且它会删除记录中的大多数其他字段。
该模型有 40 或 50 个属性;我只是想更新其中的 3 或 4 个。
但是除了“ID”和我表单中的字段之外的所有内容都被更新设置为“null”。
问:知道我错过了什么吗?
public class EditPageModel : PageModel
{
private readonly Project.Models.MyContext _context;
[BindProperty]
public MyModel MyRecord { get; set; }
public EditPageModel(Project.Models.MyContext context)
{
_context = context;
// <= This is OK...
public async Task<IActionResult> OnGetAsync(int? id)
{
if (id == null)
{
return NotFound();
}
MyRecord = await _context.MyModel.FirstOrDefaultAsync(m => m.ID == id);
// <= This is OK, too: I call "return Page()" and everything looks fine...
public async Task<IActionResult>OnPostAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
// Update DB
_context.Attach(MyRecord).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
// No exceptions, no errors or warnings: Never get here...
...
}
return RedirectToPage("./Index");
最佳答案
你有两个选择:
选项 1:为模型中不需要更改的每个属性添加隐藏字段。
选项 2:从数据库加载记录,将属性从模型映射到 db 对象并保存更改,而不将绑定(bind)模型附加到上下文。
关于c# - .net 核心 2.2 EF : SaveChangesAsync() setting unrelated columns to null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60498850/