gpt4 book ai didi

sql - 添加到LinQ-to-Entities更新的Where子句中

转载 作者:行者123 更新时间:2023-12-04 13:45:47 24 4
gpt4 key购买 nike

假设我有一个名为Product的表,该表具有三列:Id,CustomerId,Name。 ID是主键。该模式超出了我的小组的控制范围,现在我们需要始终为所有查询(选择,更新,删除)提供CustomerId作为参数。这是一个漫长的故事,我不想涉足……它涉及触发器:-P

所以我的问题是,当我在LinqToEntities中有一个附加实体时,我想保存一些更新(例如,在这种情况下,我正在更新名称)。如何获取生成SQL的信息:

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

除了主键之外,where子句中还包含where客户ID参数。

谢谢 :-)

最佳答案

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)

关于sql - 添加到LinQ-to-Entities更新的Where子句中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/387636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com