【发布时间】:2021-05-27 17:41:34
【问题描述】:
问题:我想做的是在不先获取的情况下更新行(实体)。 我知道这已经发布了很多次,但我似乎找不到与我的场景相关的任何答案。 我正在尝试使用不是主键 (ServiceBusSequenceNumber) 的值更新行。
尝试 1
错误:
数据库操作预计会影响 1 行,但实际上会影响 0 行
代码:
var ybEvent = new YogabandEvent() { ServiceBusSequenceNumber = 4 };
using (var dbContext = _contextFactory.CreateDbContext())
{
ybEvent.Status = EventStatus.Completed;
dbContext.Entry<YogabandEvent>(ybEvent).State = EntityState.Modified;
await dbContext.SaveChangesAsync();
}
尝试 2
错误:
“INSERT 语句与 FOREIGN KEY 约束“FK_YogabandEvents_Yogabands_YogabandId”冲突。冲突发生在数据库“yogabandy2020-dev”、表“dbo.Yogabands”、列“Id”中。\n语句已终止。”
代码:
var ybEvent = new YogabandEvent() { ServiceBusSequenceNumber = 4 };
using var dbContext = _contextFactory.CreateDbContext();
dbContext.YogabandEvents.Attach(ybEvent);
ybEvent.Status = EventStatus.Completed;
await dbContext.SaveChangesAsync();
仅供参考:我可以先获取更新,如下所示,但我想更新行而不先获取:
using var dbContext = _contextFactory.CreateDbContext();
var ybEvent = await dbContext.YogabandEvents.Where(p => p.ServiceBusSequenceNumber == 4).FirstOrDefaultAsync();
ybEvent.Status = EventStatus.Completed;
await dbContext.SaveChangesAsync();
【问题讨论】:
-
您不能插入表中已经存在的键。您必须使用更新。
-
你能提供一个简短的例子吗?
-
@jdweng 是的,但是那个错误是“你不能插入一个不引用父行的子行”
-
只需先下载该行,它会拯救世界的痛苦,或者为 UPDATE yogabands SET eventstus='completed' WHERE servicebusnumber = 4 发出 SQL 原始数据?
-
@user1186050 为
UPDATE yogabandevents SET eventstatus='completed' WHERE servicebussequencenumber = 4发出SQL raw?