首页 > 解决方案 > 更新在 Entity Framework Core 中将值设置为 null

问题描述

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

给定以下代码片段:

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

不知何故,第一个分配order.WarrantyRegistrationId = warrantyRegistrationId;在数据库中被设置为空。

当我运行 Sql Server 分析器时,我看到以下内容:

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

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

我被卡住了,无法弄清楚为什么会这样。

有任何想法吗?

标签: c#entity-framework-core

解决方案


万一其他人遇到这种情况,这就是答案。

我已将此设置为.HasOne().WithOne(),它在 WarrantyRegistrationId 上创建了一个唯一索引。由于我分配了一个新的 Id,它从以前的 WarrantyRegistrationId 中删除它以保持它的唯一性。

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


推荐阅读