Создание моделей в Entity Framework Core

Модели, Fluent API и аннотации данных

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

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

Все сущности, с которыми работает EntityFramework Core, определяются в виде классов моделей. При этом EF Core использует ряд условностей для сопоставления классов моделей с таблицами. Например, названия столбцов должны соответствовать названиям свойств и т.д. В этом случае Entity Framework сможет сопоставить столбцы таблицы и свойства модели.

Однако с помощью таких механизмов, как Fluent API и аннотации данных мы можем добавить дополнительные правила конфигурации, либо переопределить используемые условности.

Fluent API

Fluent API представляет набор методов, которые определяют сопоставление между классами и их свойствами и таблицами и их столбцами. Как правило, функционал Fluent API задействуется при переопределении метода OnModelCreating:

public class ApplicationContext : DbContext
{
    public DbSet<User> Users { get; set; }
	public ApplicationContext()
    {
		Database.EnsureCreated();
    }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=helloappdb;Trusted_Connection=True;");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // использование Fluent API
        base.OnModelCreating(modelBuilder);
    }
}

Аннотации

Аннотации представляют настройку классов моделей с помощью атрибутов. Большинство подобных атрибутов располагаются в пространстве System.ComponentModel.DataAnnotations, которое нам надо подключить в файл c# перед использованием аннотаций. Например:

using System.ComponentModel.DataAnnotations;

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

В данном случае атрибут Required представляет аннотацию, которая указывает, что свойство Name обязательно должно иметь значение.

Таким образом, мы можем использовать три подхода к определению моделей:

  • Условности (conventions)

  • Fluent API

  • Аннотации данных

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850