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

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

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

Каждая сущность по умолчанию сопоставляется с таблицей, которая называется по имени свойства 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():

using Microsoft.EntityFrameworkCore;

public class ApplicationContext : DbContext
{
    public DbSet<User> Users { get; set; } = null!;
    public ApplicationContext()
    {
        Database.EnsureDeleted();
        Database.EnsureCreated();
    }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite("Data Source=helloapp.db");
    }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User>().ToTable("People");
    }
}
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:

using Microsoft.EntityFrameworkCore;

public class ApplicationContext : DbContext
{
    public DbSet<User> Users { get; set; } = null!;
    public ApplicationContext()
    {
        Database.EnsureDeleted();
        Database.EnsureCreated();
    }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite("Data Source=helloapp.db");
    }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User>().Property(u => u.Id).HasColumnName("user_id");
    }
}
public class User
{
    public int Id { get; set; }
    public string? Name { get; set; }
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850