EF6更新违反主键约束无法在对象中插入重复的键

时间:2018-10-26 03:31:05

标签: c# asp.net-mvc entity-framework linq razor

我正在尝试首先使用EF代码更新多对多关系。每当我更新时,都会出现此错误,错误中的DietaryListings是由迁移创建的联接表:

  

违反主键约束'PK_dbo.DietaryListings'。无法在对象“ dbo.DietaryListings”中插入重复键。重复的键值为(1,52)。   该声明已终止。

我意识到更新之前DietaryListings中已经存在重复数据。我只是不明白为什么EF不允许使用ListingDietary之间的映射关系进行更新。如果关系发生改变,EF是否不应该更新关系?在对实体进行EF更新之前,我需要手动删除该联接表中的重复记录吗?

在我的MVC Controller中,我试图使用从剃刀视图传递来的模型数据来更新现有对象,

//listing = updated model from razor view
//listingExisting = listing from db service 
foreach (var dietary in listing.Dietaries)
{
    if (dietary.Selected)
    {
        listingExisting.Dietaries.Add(dietary);
    }
}
listingExisting.ObjectState = Repository.Pattern.Infrastructure.ObjectState.Modified;
_listingService.Update(listingExisting);

列表类:

public partial class Listing : Repository.Pattern.Ef6.Entity
{
    public Listing()
    {   
        this.Dietaries = new List<Dietary>();  
    }
    public int ID { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Dietary> Dietaries { get; set; }
}

饮食课程:

public partial class Dietary: Repository.Pattern.Ef6.Entity  
{
    public Dietary()        
    {            
        this.Listings = new List<Listing>();       
    }
    public int ID { get; set; }
    public string Name { get; set; }     
    public virtual ICollection<Listing> Listings { get; set; }         
}

我查看了所有这些链接,以及其中一些有用的但无效的链接: link1 link2 link3 link4 link5 link6

0 个答案:

没有答案