c# - 更新在 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
我被卡住了,无法弄清楚为什么会这样。
有任何想法吗?
解决方案
万一其他人遇到这种情况,这就是答案。
我已将此设置为.HasOne().WithOne()
,它在 WarrantyRegistrationId 上创建了一个唯一索引。由于我分配了一个新的 Id,它从以前的 WarrantyRegistrationId 中删除它以保持它的唯一性。
我将其更改为.HasOne().WithMany()
现在可以使用。
推荐阅读
- php - Amazon EC2 服务器之间的 Http GET 请求
- visual-studio - “Mk4tcl_Init”:不允许定义 dllimport 函数
- azure - 如何检索 Powershell 属性/对象
- google-cloud-filestore - 在 GCP Windows 实例上配置 GCP 文件存储
- python - 我用 tkinter 做了一个扫雷游戏
- r-exams - 如何在 LaTeX 模板中跨部分分配问题?
- django - 是否可以将特定域的请求路由到 Django 中的不同 URL 方案?
- flink-streaming - Flink-Siddhi 控制事件启动失败
- python - Python : ^ SyntaxError: 解析时出现意外 EOF
- solr - 在 Lucidworks Fusion 4 中更改“Solr Cluster”