Сопоставление таблиц и столбцов

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

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

Сопоставление таблиц

По умолчанию каждая сущность сопоставляется с таблицей, которая называется по имени свойства DbSet<T> в контексте данных, представляющего данную сущность. Если в контексте данных подобного свойства не определено, то для названия таблицы используется имя класса сущности.

Атрибут Table

Атрибут Table позволяет переопределить сопоставление с таблицей по имени:

using System.ComponentModel.DataAnnotations.Schema;

[Table("People")]
public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Теперь сущность User будет сопоставляться с таблицей "People".

Метод ToTable

Аналогичное переопределение можно произвести через Fluent API с помощью метода ToTable():

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>().ToTable("People");
    }
	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; }
}

С помощью дополнительного параметра schema можно определить схему, к которой будет принадлежать таблица:

modelBuilder.Entity<User>().ToTable("People", schema: "userstore");

Сопоставление столбцов

По умолчанию каждое свойство сопоставляется с одноименным столбцом.

Атрибут Column

Атрибут Column переопределяет сопоставление:

public class User
{
	[Column("user_id")]
    public int Id { get; set; }
    public string Name { get; set; }
}

Теперь свойство Id будет сопоставляться со столбцом "user_id".

Метод HasColumnName

Также сопоставление можно переопределить в Fluent API с помощью метода HasColumnName:

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(u=>u.Id).HasColumnName("user_id");
    }
	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