更新时间:2022-12-30 18:32:17
解决方案
我不知道这是否是***的,但它适用于我,我认为这是有道理的。 EF创建一个重复的相关性,因为它们是分离的,
我以这种方式改变了我的代码:
SOLUTION I don't know if it's the best, but it works for me and I think it has sense. EF creates a duplicate of the relatedentities because they were detached, I changed my code in this way:
public void AddOrUpdate(MyEntity entity) {
var dbEntity = _context.MyEntities
.Include(e => e.RelatedEntitis)
.Where(e => e.ID == entity.ID)
.SingleOrDefault();
//replace entities with those taken from the context
var relatedEntities = _context.RelatedEntities;
var detachedEntities = entity.RelatedEntities;
entity.RelatedEntities = new List<RelatedEntity>();
foreach (var ent in detachedEntities)
{
entity.RelatedEntities.Add(relatedEntities .Where(e => e.ID == hop.ID).SingleOrDefault());
}
var newRelated = entity.RelatedEntitis.ToList<RelatedEntity>();
var dbRelated = dbEntity.RelatedEntity.ToList<RelatedEntity>();
_context.Entry(dbEntity).CurrentValues.SetValues(entity);
_context.Entry(dbEntity.RelatedEntity).CurrentValues.SetValues(entity.RelatedEntitis);
var comparer = new EqualityComparer();
var addedRelated = newRelated.Except(dbRelated, comparer).ToList<RelatedEntity>();
var deletedRelated = dbRelated.Except(newRelated, comparer).ToList<RelatedEntity>();
addedRelated.ForEach(e => dbEntity.RelatedEntity.Add(e));
deletedRelated.ForEach(e => dbEntity.RelatedEntity.Remove(e));
}