我必须将大约30个缺少的数据从电子表格导入MSSQL DB。我使用Entity Framework for Insert / Update记录到数据库中。但默认的实体框架配置性能非常低。约束是,我需要在插入表之前验证记录。如果它存在则应该使用新值更新,否则它应该将新记录插入数据库。但是将数据插入/更新到数据库需要花费大量时间。我找到了加快此过程的解决方案here。
Context.Configuration.AutoDetectChangesEnabled = false;
以上设置会对速度产生巨大影响。
但是大问题,当我将AutoDetectChangesEnabled
设置为false
时,记录未在表中更新,但inserting
完全正常。
其他人都看到了这个问题?有人帮忙解决这个问题吗?
答案 0 :(得分:0)
我已使用以下代码解决了此问题。当entry.State
设置为false时,Unchanged
会变为AutoDetectChangesEnabled
。
public virtual void Update(T entity)
{
//DbSet.Attach(entity);
//context.Entry(entity).State =EntityState.Modified;
if (entity == null)
{
throw new ArgumentException("Cannot add a null entity.");
}
var entry = context.Entry<T>(entity);
if (entry.State == EntityState.Detached)
{
var pkey = DbSet.Create().GetType().GetProperty(entity.GetType().Name + "ID").GetValue(entity);
var set = context.Set<T>();
T attachedEntity = set.Find(pkey); // You need to have access to key
if (attachedEntity != null)
{
var attachedEntry = context.Entry(attachedEntity);
attachedEntry.CurrentValues.SetValues(entity);
}
else
{
entry.State = EntityState.Modified; // This should attach entity
}
}
else if (entry.State == EntityState.Unchanged)
{
entry.State = EntityState.Modified;
}
}`