Кроме свойств 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 создаст следующую таблицу:
В программе мы можем создать объект 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