При определении строки в классе с помощью 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 (целое, не нуль)
MyDateTime (дата-время, не нуль)
MyFloat (действительное, не нуль)
MyDecimal ( decimal(18,2), not null)
MyBool (bit, not null)
Я могу изменить их, чтобы разрешить нули, используя метод .IsOptional() в Fluent API. Есть ли атрибут, который будет делать то же самое?
Я также могу изменить типы данных в определении класса, чтобы разрешить пустые значения (int?, DateTime? и т. д.), что приводит к столбцам, допускающим пустые значения в базе данных.
В чем причина этого? разрешая нули по умолчанию для строки, но не для других типов данных?