2014-11-21 40 views
1

我必须从电子表格导入大约30个数据缺失到MSSQL数据库中。我使用实体框架插入/更新记录到数据库中。但默认的实体框架配置性能非常慢。约束是,我需要在插入表之前验证记录。如果它存在,那么它应该用新值更新,否则它应该向数据库中插入新记录。但是,将记录插入/更新到数据库需要很长时间。我找到了一个解决方案来加速这个过程here实体框架Context.Configuration.AutoDetectChangesEnabled更新问题?

Context.Configuration.AutoDetectChangesEnabled = false; 

以上设置使速度有很大的差异。

但是大问题,当我将AutoDetectChangesEnabled设置为false,但是inserting功能完全正常时,表中没有更新记录。

其他人看到这个问题?有人帮助解决这个问题吗?

回答

0

我已通过使用下面的代码解决了此问题。当AutoDetectChangesEnabled设置为false时,entry.State变为Unchanged

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; 
     } 

    }`