我正在从XML反序列化实体,并尝试将它们附加到DBContext。如果没有非重复实体,则此方法工作正常。但是,如果实体重复,则失败。
我的Db上下文:
public class Context : DbContext, IDisposable {
public Context() : base("name=DefaultConnection") { }
public static Context Create() { return new Context(); }
public override int SaveChanges() {
var addedEntries = ChangeTracker.Entries().Where(e => e.State == EntityState.Added);
foreach (var entry in addedEntries) {
var dbEntity = GetDbEntity(entry);
if (dbEntity != null) {
entry.State = EntityState.Modified;
}
}
return base.SaveChanges();
}
private object GetDbEntity(DbEntityEntry entry) {
var entityType = ObjectContext.GetObjectType(entry.Entity.GetType());
using (var context = new Context()) {
var dbset = context.Set(entityType);
var entityId = (Guid)GetPropValue(entry.Entity, "Id");
var found = dbset.Find(entityId);
return found;
}
}
public static object GetPropValue(object src, string propName) {
return src.GetType().GetProperty(propName).GetValue(src, null);
}
public DbSet<PurchaseOrder> PurchaseOrders { get; set; }
}
数据模型:(每个模型都有一个Guid Id
主键)
PurchaseOrders -> LineItem -> TrackingCategory
反序列化后,当我具有这种类型的对象结构时,就会出现问题:
PurchaseOrder1 -> LineItem1 -> TrackingCategory1
-> LineItem2 -> TrackingCategory1
解串器已为TrackingCategory创建了两个单独的对象。有没有一种方法可以在SaveChanges()覆盖中检测到此问题,然后删除/忽略然后重复或合并它们。