实体框架Context.Configuration.AutoDetectChangesEnabled更新问题?

时间:2014-11-21 18:02:59

标签: c#-4.0 entity-framework-5 unit-of-work

我必须将大约30个缺少的数据从电子表格导入MSSQL DB。我使用Entity Framework for Insert / Update记录到数据库中。但默认的实体框架配置性能非常低。约束是,我需要在插入表之前验证记录。如果它存在则应该使用新值更新,否则它应该将新记录插入数据库。但是将数据插入/更新到数据库需要花费大量时间。我找到了加快此过程的解决方案here

Context.Configuration.AutoDetectChangesEnabled = false; 

以上设置会对速度产生巨大影响。

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

其他人都看到了这个问题?有人帮忙解决这个问题吗?

1 个答案:

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

    }`