Данное руководство устарело. Актуальное руководство: Руководство по Entity Framework Core 7
По умолчанию модель включает все свойства, которые определены как публичные и которые открыты для записи и чтения. Например,
public class Product { public int Id { get; set; } public string Name { get; set; } public int Price { get; set; } }
Класс Product имеет три публичных свойства, поэтому при чтении или записи в базу данных Entity Framework будет автоматически сопоставлять столбцы из таблицы с этими свойствами по имени. Но такое поведение не всегда необходимо. Иногда требуется, наоборот, исключить определенное свойство, чтобы для него не создавался столбец в таблице.
Исключение с помощью Fluent API:
using Microsoft.EntityFrameworkCore; using System.ComponentModel.DataAnnotations.Schema; namespace HelloApp { public class ApplicationContext : DbContext { public DbSet<Product> Products { get; set; } public ApplicationContext() { Database.EnsureDeleted(); Database.EnsureCreated(); } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=efbasicsappdb;Trusted_Connection=True;"); } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Product>().Ignore(b => b.Description); } } public class Product { public int Id { get; set; } public string Name { get; set; } public int Price { get; set; } public string Description { get; set; } } }
Здесь свойство Description исключается из модели.
Исключение с помощью аннотаций данных:
using System.ComponentModel.DataAnnotations.Schema; public class Product { public int Id { get; set; } public string Name { get; set; } public int Price { get; set; } [NotMapped] public string Description { get; set; } }
В обоих случаях при миграции будет создана таблица Products, которая не будет содержать столбца для свойства Description, и оно не будет участвовать в сопоставлениях при операциях с бд:
В примере выше применялись автосвойства, которые представляют сокращенную версию свойств без полноценных блоков get и set. Однако свойства не обязательно должны представлять именно автосвойства. Для хранения значений они могут использовать поля класса и иметь полноценные блоки get и set. Например:
public class Product { private string _name; public int Id { get; set; } public string Name { get { return _name; } set { _name = value; } } public int Price { get; set; } [NotMapped] public string Description { get; set; } }