Данное руководство устарело. Актуальное руководство: Руководство по Entity Framework Core 7
По умолчанию свойство является необязательным к установке, если оно допускает значение null. Это свойства, которые имеют, например, такие типы как
string
, int?
, byte[]
, объекты классов и т.д. Хотя мы также можем настроить эти свойства как обязательные.
Свойство является обязательным, если значение null
не является для него корректным. Это свойства типов int
, decimal
, bool
и т.д.
Атрибут Required указывает, что данное свойство обязательно для установки, то есть будет иметь определение NOT NULL в БД::
public class User { public int Id { get; set; } [Required] public string Name { get; set; } }
Если мы не установим свойство Name у объекта User и попытаемся добавить этот объект в бд, то получим ошибку. А столбец Name в базе данных будет определен как NOT NULL.
То же самое можно сделать и через Fluent API с помощью метода IsRequired():
public class ApplicationContext : DbContext { public DbSet<User> Users { get; set; } public ApplicationContext() { Database.EnsureDeleted(); Database.EnsureCreated(); } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<User>().Property(b => b.Name).IsRequired(); } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=helloappdb;Trusted_Connection=True;"); } } public class User { public int Id { get; set; } public string Name { get; set; } }
По умолчанию для строкового свойства в таблице создается столбец с типом nvarchar(MAX)
, то есть строка неограниченной длины (исключение - если строковое
свойство представляет ключ, тогда длина составляет 450 символов). Используя аннотации данных или Fluent API, мы можем ограничить строку по длине.
Ограничение максимальной длины применяется только к строкам и к массивам, например, byte[]
.
В аннотациях данных ограничение по длине устанавливается с помощью атрибута MaxLength:
public class User { public int Id { get; set; } [MaxLength(50)] public string Name { get; set; } }
В этом случае для столбец Name в базе данных будет иметь тип nvarchar(50)
.
Надо отметить, что также есть атрибут [MinLength], который устанавливает минимальную длину, но он на определение таблицы не влияет.
В Fluent API ограничение по длине устанавливается с помощью метода HasMaxLength():
public class ApplicationContext : DbContext { public DbSet<User> Users { get; set; } public ApplicationContext() { Database.EnsureDeleted(); Database.EnsureCreated(); } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<User>().Property(b => b.Name).HasMaxLength(50); } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=helloappdb;Trusted_Connection=True;"); } } public class User { public int Id { get; set; } public string Name { get; set; } }