例如,我有以下代码:
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
很容易被更改,所以我需要检查特定实体是否对待特定用户。
答案 0 :(得分:1)