当前位置:  开发笔记 > 数据库 > 正文

添加到LinQ-to-Entities中的Update的Where子句

如何解决《添加到LinQ-to-Entities中的Update的Where子句》经验,为你挑选了1个好方法。

假设我有一个名为Product的表,有三列:Id,CustomerId,Name.Id是主键.模式超出了我的组的控制范围,我们现在要求始终将CustomerId作为所有查询(选择,更新,删除)的参数.这是一个很长的故事,我宁愿不介入......它涉及触发器:-P

所以我的问题是,当我在LinqToEntities中有一个附加实体时,我想保存一些更新(比如我在这种情况下更新名称).如何让它生成SQL:

update Product set Name = @Name where Id=@Id and CustomerId=@CustomerId

除了主键之外,customerId参数包含在where子句中.

谢谢 :-)



1> Marc Gravell..:

CustomerId是否有助于唯一标识@Id之后的行?我没有真正遵循"触发器"位,因为触发器不知道用于更新的谓词.或者您确实希望每次都重新更新CustomerId(可UPDATE(...)在触发器中检测到)

最简单的选择是将其作为对象更新:

var qry = from product in model.Products
          where Id == @Id && CustomerId == @CustomerId
          select product;

foreach(Product p in qry) {
    p.Name = @Name;
}

model.SaveChanges(); // or whatever the method is in EF

如果您知道您希望有一条记录,则可以使用:

Product prod = (from product in model.Products
          where Id == @Id && CustomerId == @CustomerId
          select product).Single();

prod.Name = @Name;
mode.SaveChanges(); // ditto

也许可以把它写成Entity-SQL,但我不确定我会打扰,个人......(更新:我刚检查过,我不认为Entity-SQL包含DML,所以不,你不能 - 你必须使用上面的,或常规的SQL命令/ SPROC)

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有