实体框架在保存到数据库中时将可为空的无符号 int 字段的值设为 null



我遇到了一个奇怪的问题,我试图使用Entity Framework 6将无符号nullable字段的值保存到数据库中,即使我发送实际值进行保存,它也总是将db中的值设置为NULL。我不确定我在这里做错了什么。

我有实体类:

[Table("Order")]
public class OrderForComparision
{
[Key]
public string TicketNumber { get; set; }
public unint? OriginID { get; set; }
}

我有这样的表创建查询:

CREATE TABLE [dbo].[Order](
[TicketNumber] [varchar](50) NOT NULL,
[OriginID] [bigint] NULL,
CONSTRAINT [PK_OrderId] PRIMARY KEY CLUSTERED 
(
[TicketNumber] ASC
))

我以这种方式更新表格:

try
{
using (var dbCon = GetDbContext())
{
var orderInDb = await dbCon.Orders.FirstOrDefaultAsync(x => x.TicketNumber == order.TicketNumber);
if (orderInDb == null)
{
orderInDb = new OrderForComparision
{
TicketNumber = order.TicketNumber,
OriginID = order.OriginID ?? null,
};
dbCon.Orders.Add(orderInDb);
}
else
{
orderInDb.OriginID = order.OriginID ?? null;
}
await dbCon.SaveChangesAsync();
}
}
catch (Exception ex)
{
throw ex;
}

即使我将值传递给这个字段,我也只能在Db中看到NULL。当我在调试时检查对象时,我看到的是:

ColumnName  Value   Type
OriginID    3823    uint?

我试过:

OriginID == null ? (uint?)null : order.OriginID.Value

OriginID = order.OriginID.HasValue ? order.OriginID.Value : (uint?)null

OriginID = order.OriginID ?? null。对我来说什么都没有用。这可能是我的Db的问题还是我保存的方式?我就是想不通这个简单而奇怪的问题。

您总是发送null值,这就是它总是保存null值的原因。

更改

OriginID?? null

OriginID==null??null: OriginID