Ограничения свойств

Данное руководство устарело. Актуальное руководство: Руководство по Entity Framework Core 7

Последнее обновление: 16.11.2020

Обязательные свойства

По умолчанию свойство является необязательным к установке, если оно допускает значение null. Это свойства, которые имеют, например, такие типы как string, int?, byte[], объекты классов и т.д. Хотя мы также можем настроить эти свойства как обязательные.

Свойство является обязательным, если значение null не является для него корректным. Это свойства типов int, decimal, bool и т.д.

Атрибут Required

Атрибут Required указывает, что данное свойство обязательно для установки, то есть будет иметь определение NOT NULL в БД::

public class User
{
	public int Id { get; set; }
    [Required]
    public string Name { get; set; }
}

Если мы не установим свойство Name у объекта User и попытаемся добавить этот объект в бд, то получим ошибку. А столбец Name в базе данных будет определен как NOT NULL.

Метод IsRequired

То же самое можно сделать и через 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

В аннотациях данных ограничение по длине устанавливается с помощью атрибута MaxLength:

public class User
{
	public int Id { get; set; }
    [MaxLength(50)]
    public string Name { get; set; }
}

В этом случае для столбец Name в базе данных будет иметь тип nvarchar(50).

Надо отметить, что также есть атрибут [MinLength], который устанавливает минимальную длину, но он на определение таблицы не влияет.

Метод HasMaxLength

В 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; }
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850