Проблема обновления базы данных Entity Framework при использовании AutoDetectChangesEnabled = false - PullRequest
0 голосов
/ 07 октября 2018

Я использую Entity Framework и хранимые процедуры.

modelBuilder.Entity<MyModel>().MapToStoredProcedures();

Я использовал Вставить обновление и удалить без проблем. Но для каких-то целей я хочу использовать AutoDetectChangesEnabled = false;

После этой сущностибольше не работает и ничего не меняется в базе данных после SaveChanges.Но когда я комментирую AutoDetectChangesEnabled или устанавливаю значение true, он работает нормально.

Это мой код: я читаю из Excel и импортирую в базу данных:

dt = exc.ReadExcel(address, ".xlsx");

using (var db = new Context())
{
    db.Configuration.AutoDetectChangesEnabled = false;

    for (int i = 1; i < dt.Rows.Count; i++)
    {
        int id = int.Parse(dt.Rows[i][0].ToString());

        var thisChah = db.MyModel.Find(id);

        if (thisChah == null)
        {
            continue;
        }

        thisChah.f1 = dt.Rows[i][1].ToString();
        thisChah.f2 = dt.Rows[i][2].ToString();
        thisChah.f3 = dt.Rows[i][3].ToString();
        thisChah.f4 = dt.Rows[i][4].ToString();
        thisChah.f5 = dt.Rows[i][5].ToString();
        thisChah.f6 = dt.Rows[i][6].ToString();
        thisChah.f7 = dt.Rows[i][7].ToString();

        LogsAnyThing("row " + i + "- OK ");

        if(i % 50 == 0)
        {
            int result = db.SaveChanges();

            if (result > 0)
            {
                LogsAnyThing("row " + i + "- Added ");
            }
        }
    }

    db.SaveChanges();
}

1 Ответ

0 голосов
/ 07 октября 2018

Поскольку вы отключили AutoDetectChanges, вам нужно явно указать контексту, чтобы искать любые изменения, прежде чем пытаться вызвать SaveChanges ().Вы можете сделать это, добавив этот оператор - db.ChangeTracker.DetectChange() перед вызовом db.SaveChanges ().Без этого контекста не известно, что какие-либо изменения были внесены в модель.Вы можете прочитать больше @ https://docs.microsoft.com/en-us/ef/ef6/saving/change-tracking/auto-detect-changes

...