Обнуляемые типы и SQL - PullRequest
       10

Обнуляемые типы и SQL

0 голосов
/ 26 июня 2018

Например, у нас есть такая модель:

public class Trip : BaseEntity, ITrackChanges
{
    public string UniqueHash { get; set; }

    public string Description { get; set; }

    public string InternalNumber { get; set; }

    public DateTime ScheduledDateUtc { get; set; }

    public DateTime LastDeliveryDateUtc { get; set; }

    public decimal? CalculatedDistance { get; set; }

    public decimal? FreightAmount { get; set; }

    public decimal? SellAmount { get; set; }

    public decimal? Amount { get; set; }

    public decimal? Tolls { get; set; }

}

мы можем видеть много десятичных обнуляемых свойств. Мое мнение, что это свойство может быть установлено, но не может быть установлено, и это действительно! Это означает, что Trip может быть без CalculatedDistance, например, это свойство может быть рассчитано и сохранено в будущем (или никогда). Я использую этот класс сущностей как первый класс кода для генерации SQL с помощью Entity Framework. И он будет создан как

[CalculatedDistance] [decimal](18, 2) NULL,

И, как мне кажется, это правильно. Затем мы можем выполнять любые действия с этим значением, суммой, другими расчетными действиями и т. Д.

Руководитель моей команды говорит, что мы НЕ ДОЛЖНЫ вообще иметь обнуляемые типы и хранить 0 вместо нуля. Но 0 - это значение, и если мы используем 0 (-1, -100, -100500 и т. Д.), Мы действительно используем магическое число! Мы должны помнить, что 0 не является значением, но означает, что это значение не установлено! У нас уже есть «не заданное значение», это NULL. Он утверждает, что сложно делать запросы SQL к сущностям с обнуляемыми типами. Но у меня никогда не было проблем с обнуляемыми типами.

Как это сделать правильно?

...