c# - .net 核心 2.2 EF : SaveChangesAsync() setting unrelated columns to null

标签 c# asp.net-core entity-framework-core

我有一个 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/

相关文章:

c# - PostAuthenticateRequest 的开销是多少?

c# - 删除文件夹的内容而不是文件夹本身?

ASP.NET 核心 : How to get remote IP address?

c# - 解析器错误消息 : 'FCR2.abs' is not allowed here because it does not extend class 'System.Web.UI.Page'

c# - 如何从字符串中获取变量

c# - 在aspnetcore web api中使用图像的EXIF数据旋转/翻转图像

json - 如何在 ASP.NET 5.0 中为 log4net(或任何其他第三方库)添加配置

linq - ASP.NET 核心和 Entity Framework 核心 : Left (Outer) Join in Linq

c# - "ToListAsync()"和 "AsAsyncEnumerable().ToList()"的区别

c# - DotNet Core,没有为此 DbContext 配置数据库提供程序