例如我有以下代码:
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
来自客户端很容易更改,所以我需要检查特定实体对待特定用户。