更新是在Entity Framework Core中将值设置为null

时间:2019-12-27 19:15:48

标签: c# entity-framework-core

我正在使用EF Core 2.2.4,并且遇到了非常奇怪的行为。

给出以下代码段:

p '[hello][my][friend]'[1...-1].split('][')
# ["hello", "my", "friend"]

以某种方式在数据库中将第一个分配var warrantyRegistrationId = warrantyRegistration.Id; // warrantyRegistration.Id = 20 var order = ctx.Orders // Id = 13 .Where(x => x.CompanyId == 1 && x.CustomerId == warrantyRegistrationModel.CustomerId && x.IsDeleted == false && x.WarrantyRegistrationId == null) .FirstOrDefault(); var originalOrder = ctx.Orders // Id = 12 .Where(x => x.Id == order.OriginalOrderId) .FirstOrDefault(); order.WarrantyRegistrationId = warrantyRegistrationId; // order.WarrantyRegistrationId = 20 originalOrder.WarrantyRegistrationId = warrantyRegistrationId; // originalOrder.WarrantyRegistrationId = 20 ctx.SaveChanges(); // order.WarrantyRegistrationId = null, originalOrder.WarrantyRegistrationId = 20 设置为null。

当我运行Sql Server事件探查器时,看到以下内容:

order.WarrantyRegistrationId = warrantyRegistrationId;

exec sp_executesql N'SET NOCOUNT ON;
UPDATE [Orders] SET [WarrantyRegistrationId] = @p0
WHERE [Id] = @p1;
SELECT @@ROWCOUNT;
',N'@p1 int,@p0 int',@p1=12,@p0=20

我被困住了,不知道为什么会这样。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

万一其他人遇到这个问题,这就是答案。

我将其设置为.HasOne().WithOne(),这在WarrantyRegistrationId上创建了唯一索引。自从我分配了一个新ID之后,它便从以前的WarrantyRegistrationId中删除了它,以保持其唯一性。

我将其更改为.HasOne().WithMany(),并且现在可以使用。