Ali*_*cid 4 c# asp.net-mvc entity-framework dbcontext
我使用实体框架和存储过程。
modelBuilder.Entity<MyModel>().MapToStoredProcedures();
Run Code Online (Sandbox Code Playgroud)
我使用插入更新和删除没有任何问题。但出于某种目的我想使用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();
}
Run Code Online (Sandbox Code Playgroud)
小智 6
由于您已关闭 AutoDetectChanges ,因此您需要在尝试调用 SaveChanges() 之前显式告诉上下文查找任何更改。db.ChangeTracker.DetectChange()您可以通过在调用 db.SaveChanges() 之前添加此语句来完成此操作。如果没有这个上下文,就不会意识到对模型进行了任何更改。您可以阅读更多@ https://learn.microsoft.com/en-us/ef/ef6/ saving/change-tracking/auto-detect-changes