繁体   English   中英

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

[英]Update is setting value to null in Entity Framework Core

我正在使用 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 profiler 时,我看到以下内容:

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

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

有任何想法吗?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM