如何使用 Dbcontext 添加条目

Posted

技术标签:

【中文标题】如何使用 Dbcontext 添加条目【英文标题】:How to add an entry using Dbcontext 【发布时间】:2021-09-18 05:49:38 【问题描述】:

我在 pgAdmin4 中有一个表,我试图仅将数据添加到 hours 和 total_amount 列而不更改任何其他数据。其他数据被添加到不同的页面上,然后用户被重定向到一个新页面,提示他们输入时间并单击提交。通过单击提交,我希望将用户输入加载到小时列。我将如何使用 dbcontext 执行此操作? 这是我尝试过的代码:


public async Task<IActionResult> Update(int hours, int amount)

FacilityPriority facilityPriority = new FacilityPriority()
       

NumberHours = hours,

TotalAmount = amount
 


await DbContext.FacilityPriority.AddAsync(facilityPriority);
            
await DbContext.SaveChangesAsync();`

但是这一直出错,我也尝试过 DbContext.Update 但这也不起作用。

【问题讨论】:

this keeps erroring 出现什么错误? EF 核心工作。 SaveChangesAsync 工作 您是要添加记录还是更新现有记录? 【参考方案1】:

问题将是打算更新现有实体,但您不是在更新实体,而是在添加一个新实体,这可能是不完整的。执行更新时,您希望提供足够的信息,以便 DbContext 可以找到要更新的实体,然后调整预期值。

当您添加新的 FacilityPriority 并在调用 SaveChanges 之后,您应该能够访问该新记录的 PK,即设施优先级 ID。通过该视图的视图模型将此 ID 发送到任何视图非常重要,以便在回发更新时您可以提供 PK 来检索记录并更新它的值:

public async Task<IActionResult> Update(int facilityPriorityId, int hours, int amount)

    var facilityPriorty = DbContext.FacilityPriority.Single(x => x.FacilityPriorityId == facilityPriorityId);
    facilityPriority.NumberHours = hours;
    facilityPriority.TotalAmount = amount;

    await DbContext.SaveChangesAsync();

【讨论】:

非常感谢!当我尝试这样做时,我的代码错误出现在这一行: var facilityPriorty = DbContext.FacilityPriority.Single(x => x.FacilityPriorityId == facilityPriorityId);出现此错误“InvalidOperationException:序列不包含元素”我该如何解决? 那么这意味着您有一个更新调用,其中没有现有记录。检查进入时的 facilityPriorityId 是什么。如果这是 MVC 并且您从模型传递一个值,请检查在加载页面时它是否已正确填充。如果它是正确的客户端,请检查您的客户端代码是否正确解析它。 (即从模型与数据属性等读取。如果您的方法是表单提交的结果,请确保您为模型的 FacilityPriorityId 声明了 @html.HiddenFor。

以上是关于如何使用 Dbcontext 添加条目的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何编写转换数据的实体框架迁移(最好使用 DbContext)?

除了 dbContext 之外,如何向 Blazor 中的服务添加参数?

如何将时态表添加到 EF Code-First DBContext?

如何在 AJAX 错误方法中检索 DbContext SqlException?

如何使用 cron 为日志输出条目添加时间戳?

如何使用 dexie.js 添加新条目