Entity Framework делает нулевое значение беззнакового поля int равным нулю при сохранении в базу - PullRequest
0 голосов
/ 03 апреля 2020

У меня странная проблема, когда я пытаюсь сохранить значение беззнакового поля nullable в дб, используя Entity Framework 6, и оно всегда устанавливает значение как 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;
    }

Я вижу только NULL в Db, даже когда я передаю значение в это поле. Когда я проверяю объект во время отладки, я вижу это:

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 или способ, которым я сохраняю? Я просто не могу понять эту простую странную проблему.

1 Ответ

0 голосов
/ 03 апреля 2020

Вы всегда отправляете нулевое значение, поэтому оно всегда сохраняет нулевое значение.

Измените

OriginID?? null

на

OriginID==null??null: OriginID
...