2014-11-21 1 views
1

Мне нужно импортировать около 30 недостающих данных из таблицы в базу данных MSSQL. Я использовал Entity Framework для вставки/обновления записей в базу данных. Но конфигурация каркаса сущностей по умолчанию была очень медленной. Ограничение: мне нужно проверить запись перед вставкой в ​​таблицу. Если он существует, он должен обновляться новыми значениями, иначе он должен вставить новую запись в базу данных. Но для ввода/обновления записей в базу данных требуется очень много времени. Я нашел решение для ускорения этого процесса here.Entity Framework Context.Configuration.AutoDetectChangesEnabled проблема обновления?

Context.Configuration.AutoDetectChangesEnabled = false; 

Вышеуказанная установка делает огромную разницу в скорости.

Но большие проблемы, Записи не обновляются в таблице, когда я установил AutoDetectChangesEnabled в false, но inserting полностью функциональен.

Кто-нибудь еще видит эту проблему? Помогает ли кто-нибудь решить эту проблему?

ответ

0

Я исправил эту проблему, используя приведенный ниже код. entry.State становится до Unchanged когда AutoDetectChangesEnabled комплект для false.

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

    }`