Наследование в entity framework
Совет Команда EF продемонстрировала и подробно рассказала о сопоставлении TPC в эпизоде стенда сообщества данных .NET
Download 39.18 Kb.
|
NASLEDOVANIYE ...
- Bu sahifa navigatsiya:
- Совет Сведения о настройке разных имен столбцов первичного ключа в каждой таблице см. в разделе Конфигурация аспектов, относящихся к таблице
- Схема базы данных TPC Стратегия TPC похожа на стратегию TPT, за исключением того, что для каждого конкретного типа в иерархии создается другая таблица, но таблицы не
Совет
Команда EF продемонстрировала и подробно рассказала о сопоставлении TPC в эпизоде стенда сообщества данных .NET. Как и все эпизоды Сообщества Standup, вы можете смотреть TPC эпизод сейчас на YouTube. C#Копировать modelBuilder.Entity .ToTable("Blogs"); modelBuilder.Entity .ToTable("RssBlogs"); Совет Вместо вызова ToTable для каждого типа сущности только вызов modelBuilder.Entity Совет Сведения о настройке разных имен столбцов первичного ключа в каждой таблице см. в разделе Конфигурация аспектов, относящихся к таблице. EF создаст следующую схему базы данных для приведенной выше модели. SQLКопировать CREATE TABLE [Blogs] ( [BlogId] int NOT NULL DEFAULT (NEXT VALUE FOR [BlogSequence]), [Url] nvarchar(max) NULL, CONSTRAINT [PK_Blogs] PRIMARY KEY ([BlogId]) ); CREATE TABLE [RssBlogs] ( [BlogId] int NOT NULL DEFAULT (NEXT VALUE FOR [BlogSequence]), [Url] nvarchar(max) NULL, [RssUrl] nvarchar(max) NULL, CONSTRAINT [PK_RssBlogs] PRIMARY KEY ([BlogId]) ); Схема базы данных TPC Стратегия TPC похожа на стратегию TPT, за исключением того, что для каждого конкретного типа в иерархии создается другая таблица, но таблицы не создаются для абстрактных типов, отсюда и название "table-per-concrete-type". Как и в случае с TPT, сама таблица указывает тип сохраненного объекта. Однако, в отличие от сопоставления TPT, каждая таблица содержит столбцы для каждого свойства в конкретном типе и его базовых типах. Схемы баз данных TPC денормализованы. Например, рассмотрите возможность сопоставления этой иерархии: C#Копировать public abstract class Animal { protected Animal(string name) { Name = name; } public int Id { get; set; } public string Name { get; set; } public abstract string Species { get; } public Food? Food { get; set; } } public abstract class Pet : Animal { protected Pet(string name) : base(name) { } public string? Vet { get; set; } public ICollection } public class FarmAnimal : Animal { public FarmAnimal(string name, string species) : base(name) { Species = species; } public override string Species { get; } [Precision(18, 2)] public decimal Value { get; set; } public override string ToString() => $"Farm animal '{Name}' ({Species}/{Id}) worth {Value:C} eats {Food?.ToString() ?? " } public class Cat : Pet { public Cat(string name, string educationLevel) : base(name) { EducationLevel = educationLevel; } public string EducationLevel { get; set; } public override string Species => "Felis catus"; public override string ToString() => $"Cat '{Name}' ({Species}/{Id}) with education '{EducationLevel}' eats {Food?.ToString() ?? " } public class Dog : Pet { public Dog(string name, string favoriteToy) : base(name) { FavoriteToy = favoriteToy; } public string FavoriteToy { get; set; } public override string Species => "Canis familiaris"; public override string ToString() => $"Dog '{Name}' ({Species}/{Id}) with favorite toy '{FavoriteToy}' eats {Food?.ToString() ?? " } public class Human : Animal { public Human(string name) : base(name) { } public override string Species => "Homo sapiens"; public Animal? FavoriteAnimal { get; set; } public ICollection Pets { get; } = new List (); public override string ToString() => $"Human '{Name}' ({Species}/{Id}) with favorite animal '{FavoriteAnimal?.Name ?? " $" eats {Food?.ToString() ?? " } Download 39.18 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling