我正在使用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
我被困住了,不知道为什么会这样。
有什么想法吗?
答案 0 :(得分:1)
万一其他人遇到这个问题,这就是答案。
我将其设置为.HasOne().WithOne()
,这在WarrantyRegistrationId上创建了唯一索引。自从我分配了一个新ID之后,它便从以前的WarrantyRegistrationId中删除了它,以保持其唯一性。
我将其更改为.HasOne().WithMany()
,并且现在可以使用。