实体框架更新问题

Tom*_*sie 2 .net c# linq-to-entities entity-framework

我正在使用实体框架和 LINQ 来检索数据。我遇到以下问题:

var customer= db.customers.where(c=>c.id==1);
customer.name=santhosh;
customer.city=hyd;
Run Code Online (Sandbox Code Playgroud)

在我调用之前,数据库中的字段正在更改:

db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

我该如何避免这种情况?

Jac*_*ard 5

正如其他人所说,我相信您也在另一个地方使用您的上下文,并且其他位置正在调用 savechanges 并更新所有内容。尝试使用 using 语句执行 @Evan 建议的操作,以确保您拥有新的上下文。

AsNoTracking 不会确保您获得未缓存在数据库中的实体,其目的是不将对象放入上下文中。如果您使用 AsNoTracking,然后更改查询中返回的实体,您将需要在调用 savechanges 之前将修改后的实体附加到上下文,否则它们将不会更新。

    var customer= db.customers.AsNoTracking().Single(c=>c.id==1);
    customer.name=santhosh;
    customer.city=hyd;
    ctx.customers.Attach(customer);

    ctx.ObjectStateManager.ChangeObjectState(customer, System.Data.EntityState.Modified);
Run Code Online (Sandbox Code Playgroud)

我只会对其他帖子发表评论,但还没有足够的代表。