Entity Framework 4 и SQL Server 2008 несколько возможных внешних ключей - PullRequest
0 голосов
/ 07 декабря 2011

Я пытаюсь придумать дизайн базы данных, который бы работал с Entity Framework 4 Code First.На самом деле, у меня еще нет опыта работы с EF4 Code First, но, насколько я понимаю, если я напишу код, он создаст базу данных и таблицы.

Проблема в следующем.Существуют различные типы аукционов, все они имеют некоторые общие поля и некоторые конкретные.В коде я предполагаю наличие базового абстрактного класса под названием Auction и подклассов, таких как LowestUniqueBidAuction и EnglishForwardAuction и т. Д.

Ничего удивительного там нет.Проблема в том, что я представляю структуру базы данных, чтобы имитировать это.Я представляю себе Auction стол и LowestUniqueBidAuction стол и EnglishForwardAuction стол.В таблице Auction я представляю внешний ключ в одну из этих двух таблиц для каждой строки в зависимости от типа аукциона, в котором эта строка равна .Я также представляю другой столбец в таблице Auction с именем производной таблицы аукциона (например, EnglishForwardAuction).

Проблема в том, что всякий раз, когда я создавал внешний ключ, мне приходилось указывать имя внешней таблицы, на которую указывают ключевые ключи (что имеет смысл).В этом случае, однако, существует одна из многих таблиц, на которые может указывать ключ.Так что здесь много вопросов.Во-первых, я мог просто не использовать внешний ключ и просто использовать обычное поле, но тогда база данных не сможет поддерживать согласованность данных для меня.Второй вопрос: как EF Code First справится с этим?Другими словами, как он узнает, что если я запрашиваю все строки EnglishForwardAuction из таблицы Auction, он должен посмотреть на столбец с именем таблицы и затем соединиться с таблицей EnglishForwardAuction, чтобы получить дополнительные поля?

Кто-нибудь сталкивался с подобными проблемами?

Спасибо,

Сачин

1 Ответ

1 голос
/ 07 декабря 2011

Эта проблема решается в Entity Framework несколькими способами - узнайте, как EF обрабатывает наследование и какие стратегии доступны.

Существует три основных способа решения этой проблемы:

(1) Таблица на иерархию

У вас есть только одна таблица, которая представляет все возможные подклассы. Конечно, это означает, что несколько строк (которые существуют только в данном подклассе) должны быть обнуляемыми, поскольку они не отображаются / не существуют в суперклассах или других подклассах.

(2) Таблица для каждого типа

Каждый подкласс получает свою собственную таблицу, и по умолчанию таблица подтипов разделяет PK с таблицей базовых классов - например, PK = 1 в Auction также будет PK = 1 в EnglishForwardAuction. Таким образом, ваши таблицы подклассов ссылаются на базовую таблицу, а не наоборот.

(3) Таблица для каждого типа бетона

Каждый конкретный подкласс (ваши отдельные типы аукциона) получает свою собственную таблицу, но эта таблица содержит все - все столбцы этого конкретного типа, но также и его базовый тип.

Подробнее здесь:

Поиск Entity Framework Inheritance и / или одной из этих стратегий покажет гораздо больше хитов - эта тема очень хорошо освещена и обсуждается на веб-сайтах! : -)

...