1

例如我有以下代码:

Product p = new Product { Id = 5, Name = "milk" };
....
cnx.Product.Attach(p);
cnx.Entry(p).State = System.Data.EntityState.Modified;
cnx.SaveChanges();

EF 生成以下查询:

update Product set Name = @parameter1 where Id = @parameter2 ...

如何强制 EF 向更新查询添加附加检查,例如:

update Product set Name = @parameter1 where Id = @parameter2 AND CategoryId = @parameter3

我将举另一个例子来更好地理解这个问题:

public partial class SomeEntity
{
   public int SomeEntityId { get; set; }
   public string Name { get; set; }
   public int UserId { get; set; }
   public virtual User User { get; set; }
}

我有一个 MVC 应用程序,我UserId在用户登录后将其存储在会话中。在某些页面中,用户可以编辑SomeEntity. 这是那个方法:

[HttpPost]
public EditSomeEntity(int someEntityId,string name)
{
    int userId = (int)Session["UserId"];
    SomeEntity updated = new SomeEntity 
    { SomeEntityId = someEntityId,Name = name, UserId = userId  };
    var MyContext cnx = new MyContext();
    cnx.SomeEntity.Attach(updated);
    cnx.Entry(updated).State = System.Data.EntityState.Modified;
    cnx.SaveChanges();    
    return View();
}

所以我需要EF生成:

update SomeEntity set Name = @parameter1 where SomeEntityId = @parameter2 AND UserId = @parameter3 

因为SomeEntityId来自客户端很容易更改,所以我需要检查特定实体对待特定用户。

4

1 回答 1

1

您可以设置ConcurrencyModeFixed

在此处输入图像描述

这将在更新时使用实体上的所有属性。

它这样做的原因是为了确保仅在记录没有更改时才更新记录。

在这里查看更多

于 2013-06-03T15:42:34.790 回答