实体框架在保存到数据库时将可为空的unsigned int字段的值设置为null

问题描述 投票:0回答:1

我遇到这个奇怪的问题,我尝试使用nullable将无符号Entity Framework 6字段的值保存到db中,即使我发送要保存的实际值,它也总是在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或我的储蓄方式有问题吗?我只是想不出这个简单的怪异问题。

c# .net entity-framework-6 dbcontext nullable
1个回答
0
投票

您总是发送空值,这就是为什么它总是保存空值的原因。

© www.soinside.com 2019 - 2024. All rights reserved.