Как отобразить связанную таблицу на унаследованную сущность (таблица на иерархию)? - PullRequest
0 голосов
/ 15 декабря 2008

У меня есть эти таблицы в моей базе данных.

альтернативный текст http://img166.imageshack.us/img166/3133/testdbschemafy5.png

С Entity Framework я хотел бы иметь что-то вроде этого:

альтернативный текст http://img166.imageshack.us/img166/5721/testdbschemaefdv5.png

Я использовал наследование таблиц на иерархию, поэтому я добавил новый объект для премиум-пользователя и сопоставил его с пользовательским объектом с условиями для свойства IsPremiumUser. Я хотел бы, чтобы таблица PremiumAccount ассоциировалась с сущностью PremiumUser, но она не будет работать так, как я это сделал: - / У меня есть это сообщение об ошибке:

Ошибка 3021: проблема в фрагменте сопоставления, начиная со строки 113: каждый из следующих столбцов таблицы PremiumAccount сопоставлен с несколькими концептуальными свойствами стороны: PremiumAccount.UserID сопоставлен с

Есть ли решение моей проблемы? Могу ли я связать сущность PremiumAccount с унаследованной сущностью? Есть ли другой способ сделать это?

1 Ответ

2 голосов
/ 15 декабря 2008

Я думаю, что поле PK подтипа должно быть удалено (так как оно наследует его от своего супертипа).

Тем не менее, это не хороший кандидат на наследство. Наследование сущностей должно выполняться только в том случае, если тип не может измениться для сущности. Это скорее кандидат на роль, поэтому настоящие отношения 1: 1. Дело в том, что Пользователь может регулярно терять / приобретать роль Премиум, но вы не можете изменить тип существующего экземпляра сущности (== строк таблицы), даже если кажется, что вы можете просто изменить данные в база данных. Отображение наследования связано со строгими правилами, их нельзя согнуть, поскольку наследование в сущностях связано с интерпретацией данных в базе данных, поскольку реляционные модели не знают концепции наследования (хотя некоторые базы данных «обманывают», разрешая наследование в DDL SQL как postgresql)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...