Использование полей сущности

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

Кроме свойств Entity Framework также может использовать поля класса (в том числе приватные) для сопоставления со столбцами. Например, возьмем следующую сущность:

public class User
{
    int id;
    string name;
    int age;
    public int Id => id;
    public int Age  => age;
    public User(string name, int age)
    {
        this.name = name;
        this.age = age;
    }

    public void Print() => Console.WriteLine($"{id}. {name} - {age}");
}

Здесь в классе User определено три поля. Все они приватные, недоступные извне. Кроме того, есть два свойства для чтения, которые возвращают значения полей. Два поля - name и age устанавливаются только через конструктор. Третье поле - id, как мы ожидаем, будет устанавливаться при добавлении объекта сущности в базу данных.

Настроим класс контекста для применения этих полей:

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("Id").HasField("id");
        modelBuilder.Entity<User>().Property("Age").HasField("age");
        modelBuilder.Entity<User>().Property("name");
    }
}

Для сопоставления полей со свойствами и столбцами применяется Fluent API. Чтобы использовать поле в качестве свойства при сопоставлении со столбцами применяется метод Property(), в который передается название поля:

modelBuilder.Entity<User>().Property("name");

То есть в данном случае мы говорим, что мы хотим, чтобы поле "name" выступало в качестве свойства сущности и сопоставлялось со столбцом в таблице бд.

С помощью метода HasField() устанавливается поле, которое используется для свойства. Так, в выражении

modelBuilder.Entity<User>().Property("Id").HasField("id");

Для свойства Id будет использоваться поле id

В итоге Entity Framework создаст следующую таблицу:

Поля класса в Entity Framework и C#

В программе мы можем создать объект User и добавить в бд:

using (ApplicationContext db = new ApplicationContext())
{
    User bob = new User("Bob", 30);
    User kate = new User("Kate", 29);
    db.Users.Add(bob);
    db.Users.Add(kate);
    db.SaveChanges();

    var users = db.Users.ToList();
    foreach (User user in users)
    {
        user.Print();
    }
}

Консольный вывод программы:

1. Bob - 30
2. Kate - 29
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850