我正在尝试首先使用EF代码更新多对多关系。每当我更新时,都会出现此错误,错误中的DietaryListings是由迁移创建的联接表:
违反主键约束'PK_dbo.DietaryListings'。无法在对象“ dbo.DietaryListings”中插入重复键。重复的键值为(1,52)。 该声明已终止。
我意识到更新之前DietaryListings中已经存在重复数据。我只是不明白为什么EF不允许使用Listing
和Dietary
之间的映射关系进行更新。如果关系发生改变,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