[英]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.