Подход TPT

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

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

Подход TPT (Table Per Type / Таблица на тип) предполагает сохранение в общей таблице только тех свойств, которые общие для всех классов-наследников, то есть которые определены в базовом классе. А те свойства, которые относятся только к производному классу, сохраняются в отдельной таблице.

Чтобы применить подход, возьмем из предыдущего примера систему классов и добавим к классу Smartphone атрибут Table:

public class Phone
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Company { get; set; }
    public int Price { get; set; }
}
[Table("Smartphones")]
public class Smartphone : Phone
{
    public string OS { get; set; }
}
class MobileContext : DbContext
{
    public MobileContext() : base("DefaultConnection")
    { }
    public DbSet<Phone> Phones { get; set; }
    public DbSet<Smartphone> Smarts { get; set; }
}

Все остальное остается также, как и при подходе TPH. Но теперь база данных будет содержать следующие таблицы:

Таблица для смартфонов содержит только оно поле OS, а также ключ Id для связи с таблицей Phones.

Применение моделей будет аналогично подходу TPH:

using(MobileContext db = new MobileContext())
{
	db.Phones.Add(new Phone {Name = "Samsung Galaxy S5", Company = "Samsung", Price = 14000 });
	db.Phones.Add(new Phone {Name = "Nokia Lumia 630", Company = "Nokia", Price = 8000 });
	
	Smartphone s1 = new Smartphone { Name = "iPhone 6", Company = "Apple", Price = 32000, OS = "iOS" };
	db.Smarts.Add(s1);
	db.SaveChanges();
	
	foreach (Phone p in db.Phones)
		Console.WriteLine("{0} ({1}) - {2}", p.Name, p.Company, p.Price);
    Console.WriteLine();
    foreach (Smartphone p in db.Smarts)
        Console.WriteLine("{0} ({1}, {2}) - {3}", p.Name, p.Company, p.Price, p.OS);
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850