Есть ли способ преформ следующих отображений (с использованием базы данных, первый подход):Entity Framework - Расщепление таблица несколько субъектов с ПЕРЕКРЫТИЕМ СОСТОЯНИЯ
Таблицы: (Определение таблицы с C# -кака синтаксис только для удобства чтения)
table MainItems
{
column PK not-null unique int MainItemKey;
column string Name;
column string AspectAInfo;
column string AspectBInfo;
// 0 for A, 1 for B, 2 for both (Could be replaced with 2 boolean columns)
column not-null int AspectABOrBoth;
}
table AspectAMoreInfo
{
column PK not-null unique in AspectAMoreInfoKey;
column FK not-null int MainItemKey;
column string PayLoadA;
}
table AspectBMoreInfo
{
column PK not-null unique in AspectBMoreInfoKey;
column FK not-null int MainItemKey;
column double PayLoadB;
}
Entities:
// Map to MainItems table if column AspectABOrBoth is 0 or 2
class TypeAItem
{
// Map to MainItemKey column
int TypeAItemKey { get; set; }
string Name { get; set; } // Map to Name column
// Navigation property to AspectAMoreInfo rows
List<TypeAMoreInfo> MoreInfo { get; set; }
// Navigation property to MainItems row when AspectABOrBoth is 2
TypeBItem OptionalInnerItemB { get; set; }
}
// Map to MainItems table if column AspectABOrBoth is 1 or 2
class TypeBItem
{
// Map to MainItemKey column
int TypeBItemKey { get; set; }
string Name { get; set; } // Map to Name column
// Navigation property to AspectBMoreInfo rows
List<TypeBMoreInfo> MoreInfo { get; set; }
}
// Map to AspectAMoreInfo table
class TypeAMoreInfo
{
// Map to AspectAMoreInfoKey column
int TypeAMoreInfoKey { get; set; }
// Navigation property to MainItems row when MainItems.AspectABOrBoth is 0 or 2
TypeAItem Owner { get; set; }
}
// Map to AspectBMoreInfo table
class TypeBMoreInfo
{
// Map to AspectBMoreInfoKey column
int TypeBMoreInfoKey { get; set; }
// Navigation property to MainItems row when MainItems.AspectABOrBoth is 1 or 2
TypeBItem Owner { get; set; }
}
Возможные направления я рассмотрел, но предпочитают не брать включают в себя:
Определение 2 просмотров выше MainItems таблицы и отображения сущностей на них.
(Может использовать базовый тип с этим, вместе с таблицей-Per-Бетон-Type.)Добавление 2 NULLABLE столбцы FK в таблице MainItems, которые указывают на себе (в той же строке) вместо AspectABOrBoth колонке
(1 не-нулевое значение, если MAINITEM является AspectA, другой не-нулевое значение, если MAINITEM является AspectB.)
(Может использовать таблицу-разбиение с этим, на основе новых столбцов FK.)
Могут быть общие свойства, такие как «Имя», которые я только что добавил к примеру. Наследование TPH было бы большим, за исключением того, что строка не может быть сопоставлена двум различным производным типам одновременно. Разделение таблицы с условиями невозможно, по крайней мере, не через дизайнера. –
Это больше о "давайте попробуем, и вы увидите". Это непросто. Не все можно сопоставить с EF, как вы хотите. –
Я так и думал, сопоставление новых моделей с существующими схемами без нарушения существующих обычаев может быть сложным. –