更新 EF Core 连接表时无法插入重复键错误
Cannot insert duplicate key error when updating EF Core joined tables
在我无休止地寻求让我的数据绑定在这个项目上工作的过程中,我遇到了一个问题,我在连接的 table 中绑定数据,但是当我尝试调用更新而不是更新它时如果它正在尝试插入新记录。
我的模型和控制器中的更新在下面的 dotnetfiddle link 中。有问题的绑定在 model.Product.Tags 上。 model.Product.Tags 具有我期望的标签计数和标签(当我不更改它们而只是尝试保存时),但是,在保存时,ProductTag table 上出现重复键错误。我想要的是更新产品,如果标签没有更改,则不要尝试对 ProductTag table 进行任何更新,因此非常感谢任何关于如何以最好的、最少的 hacky 方式实现此目的的指示。谢谢
试试这个:
var existingProduct = _context.Set<Product>()
.Include(t=>t.Tags)
.FirstOrDefaultAsync(i=> i.Id=model.Product.Id);
if(existingProduct !=null)
{
Context.Entry(existingProduct).CurrentValues.SetValues(model.Product);
var result = await Context.SaveChangesAsync();
}
更新
您可以通过这种方式添加新标签
Context.Entry(existingProduct).CurrentValues.SetValues(model.Product);
if (existingProduct.Tags ==null) existingProduct.Tags= new List<Tag>();
existingProduct.Tags.Add(newTag);
var result = await Context.SaveChangesAsync();
在我无休止地寻求让我的数据绑定在这个项目上工作的过程中,我遇到了一个问题,我在连接的 table 中绑定数据,但是当我尝试调用更新而不是更新它时如果它正在尝试插入新记录。
我的模型和控制器中的更新在下面的 dotnetfiddle link 中。有问题的绑定在 model.Product.Tags 上。 model.Product.Tags 具有我期望的标签计数和标签(当我不更改它们而只是尝试保存时),但是,在保存时,ProductTag table 上出现重复键错误。我想要的是更新产品,如果标签没有更改,则不要尝试对 ProductTag table 进行任何更新,因此非常感谢任何关于如何以最好的、最少的 hacky 方式实现此目的的指示。谢谢
试试这个:
var existingProduct = _context.Set<Product>()
.Include(t=>t.Tags)
.FirstOrDefaultAsync(i=> i.Id=model.Product.Id);
if(existingProduct !=null)
{
Context.Entry(existingProduct).CurrentValues.SetValues(model.Product);
var result = await Context.SaveChangesAsync();
}
更新
您可以通过这种方式添加新标签
Context.Entry(existingProduct).CurrentValues.SetValues(model.Product);
if (existingProduct.Tags ==null) existingProduct.Tags= new List<Tag>();
existingProduct.Tags.Add(newTag);
var result = await Context.SaveChangesAsync();