Обнуляемость строк по сравнению с другими типами данных в столбцах, созданных Entity Framework Code First - PullRequest
8 голосов
/ 19 марта 2012

При определении строки в классе с помощью Code First по умолчанию для столбцов в сгенерированной базе данных допускаются значения NULL.

    public string MyString { get; set; }

создает этот столбец:

MyString (nvarchar (max), null)

Я могу изменить это значение на "not null", используя атрибут [Required] или метод .IsRequired () в Fluent API.

Значение по умолчанию для других типов данных не допускает нулевые значения.

    public int MyInt { get; set; }
    public DateTime MyDateTime { get; set; }
    public float MyFloat { get; set; }
    public decimal MyDecimal { get; set; }
    public bool MyBool { get; set; }

создает следующие столбцы:

MyInt (int, not null)

MyDateTime (дата-время, не нуль)

MyFloat (реальный, не ноль)

MyDecimal (десятичный (18,2)), не нуль)

MyBool (бит, не нуль)

Я могу изменить их, чтобы разрешить нулевые значения, используя метод .IsOptional () в FluentAPI.Есть ли атрибут, который будет делать то же самое?

Я также могу изменить типы данных в определении класса, чтобы разрешить нулевые значения (int ?, DateTime? И т. Д.), Что приводит к появлению столбцов, допускающих нулевые значения в базе данных.

Что такоеОбоснование для разрешения пустых значений по умолчанию для строк, но не для других типов данных?

Ответы [ 2 ]

5 голосов
/ 19 марта 2012

Вы вроде ответили на это сами.Вы не можете иметь нулевую ссылку на любой другой тип данных, который вы перечислили.Таким образом, если код не может обработать ноль, то он также будет обеспечивать выполнение базы данных.

Просто чтобы прояснить это, поскольку вы концентрируетесь конкретно на строке, а не на других типах значений. Вот статья MDSN о строках , если вы ищете ноль, вы увидите эту строку:

В отличие от этого, нулевая строка не относится к экземпляру системыОбъект .String и любая попытка вызвать метод с нулевой строкой приводит к NullReferenceException

Однако, если int не может иметь значение null, он никогда не сгенерирует NullReferenceException, поскольку он всегда должен иметь значение по умолчанию.

1 голос
/ 04 июня 2014

Полезно добавить, что в EF Code First допускаются значения не только строк, но и классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...