C# 更新EF Core联接表时无法插入重复键错误

C# 更新EF Core联接表时无法插入重复键错误,c#,entity-framework,asp.net-core,entity-framework-core,asp.net-core-mvc,C#,Entity Framework,Asp.net Core,Entity Framework Core,Asp.net Core Mvc,为了让我的数据绑定在这个项目上发挥作用,我一直在努力,我遇到了一个问题,我在连接表中绑定数据,但是当我尝试调用Update而不是Update时,它就好像试图插入一条新记录 我在控制器中的模型和更新在下面的dotnetfiddle链接中。有问题的绑定位于model.Product.Tags上。model.Product.Tags具有我期望的标记计数和标记(当我不更改它们并尝试保存时),但是,当保存时,ProductTag表上存在重复的键错误。我想要的是更新产品,如果标签没有更改,那么就不要尝试对P

为了让我的数据绑定在这个项目上发挥作用,我一直在努力,我遇到了一个问题,我在连接表中绑定数据,但是当我尝试调用Update而不是Update时,它就好像试图插入一条新记录

我在控制器中的模型和更新在下面的dotnetfiddle链接中。有问题的绑定位于model.Product.Tags上。model.Product.Tags具有我期望的标记计数和标记(当我不更改它们并尝试保存时),但是,当保存时,ProductTag表上存在重复的键错误。我想要的是更新产品,如果标签没有更改,那么就不要尝试对ProductTag表进行任何更新,因此,如果有任何关于如何以最好、最少的方式实现这一点的建议,我将不胜感激。谢谢

试试这个:

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();
}
var existingProduct=\u context.Set()
.Include(t=>t.Tags)
.FirstOrDefaultAsync(i=>i.Id=model.Product.Id);
如果(现有产品!=null)
{
Context.Entry(existingProduct).CurrentValues.SetValues(model.Product);
var result=await Context.saveChangesSync();
}
更新

您可以通过这种方式添加新标记

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();

Context.Entry(existingProduct).CurrentValues.SetValues(model.Product);
如果(existingProduct.Tags==null)existingProduct.Tags=new List();
现有产品.Tags.Add(newTag);
var result=await Context.saveChangesSync();

谢谢。这适用于我的问题,并允许我更新。如果我添加了一个新标签,它不会保存它,那么我怎样才能保留现有的标签,正如您的答案所示,但也允许我这样做?model.Product.Tags.Add(myNewTag)感谢您的更新。那对我不起作用。我正在编辑的产品有3个标签。我尝试像上面那样添加第四个标签,它保存了3个原始标签,但没有添加第四个。我更新了我的答案。希望它对你有用。是的,现在我想用这种方式。非常感谢。