gpt4 book ai didi

c# - 更新记录(如果存在)

转载 作者:行者123 更新时间:2023-12-03 21:50:13 24 4
gpt4 key购买 nike

我是 EF 新手,我正在尝试了解处理插入和更新数据的最佳方法。仅就某些上下文而言,我使用 .net mvc 网站样板,并且创建了一个与 aspnetusers 具有 1:1 关系的客户表。我创建了一个 View 来管理客户数据。

这是我的 HttpPost ActionResult:

    [HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> AddCard(External.Stripe.Customer customer)
{
if (!ModelState.IsValid)
{
return View(customer);
}

External.Stripe.CustomerOperations co = new External.Stripe.CustomerOperations();
customer = co.Create(customer);

var user = UserManager.FindById(User.Identity.GetUserId());
customer.UserId = user.Id;

var context = new External.Stripe.CustomerContext();


context.Customers.Add(customer);
context.SaveChanges();

return RedirectToAction("Index", "Manage");
}

我觉得我走错了路,因为如果我对客户模型进行任何更新,我实际上需要检查 EF 我的 key 是否已经存在,如果存在,则运行更新。我认为 EF 会有一种本地方法来保存我的模型(如果需要更新)。我也不知道这是否是我保留模型的地方,或者是否最好将其放置在代码中的其他位置。

最佳答案

简短回答

...if I make any updates to the customer model, I actually need to check EF if my key already exists, and if it does, run an update instead.

AddOrUpdate()就是这样做的。来自文档:

Adds or updates entities by key when SaveChanges is called. Equivalent to an "upsert" operation from database terminology

示例

换句话说,将代码更改为:

context.Customers.AddOrUpdate(c => c.UserId, customer);
context.SaveChanges();

在上面的示例中,c => c.UserId 是一个表达式,指定在确定是否应执行添加或更新操作时应使用 UserId

注意事项

  • AddOrUpdate() 根据用户提供的任意键值匹配数据库表。在示例中,此键为 UserId。请务必使用合适的 key 。
  • AddOrUpdate() 更新所有 实体值,并将缺少值的属性的数据库单元设置为 null。使用前请务必设置对象的所有属性值(例如 customer)。

另请参阅

Update Row if it Exists Else Insert Logic with Entity Framework它有一些涉及四种或更多不同方法的答案。

关于c# - 更新记录(如果存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30224821/

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