Как я могу моделировать несовпадающие иностранные ключи - PullRequest
1 голос
/ 12 октября 2010

Я пытаюсь использовать EF для моделирования существующей базы данных SQL. БД является мультитенантной благодаря наличию столбца clientID в каждой отдельной таблице (я не могу это изменить). У меня есть структура таблицы, как показано ниже.

Столбцы таблицы ItemID:

ClientID (pk)
ItemID (pk)
ItemName

Столбцы таблицы 'Элементы':

ClientID (PK) 
ItemID (PK) [FK to ItemID.ItemID]
Version (PK)
ItemAttribute1
ItemAttribute2
ItemAttribute3

БД предназначена для хранения предыдущих версий (строк) объекта «Элемент», следовательно, столбца «Версия» и PK.

Я новичок в EF и пытаюсь принять его для своего проекта. Однако, похоже, что EF не может справиться с этой ситуацией очень хорошо. Я открыт для всех идей, включая использование хранимых процедур или представлений вместо доступа к таблицам непосредственно из EF. Как насчет того, чтобы избавиться от PK и использовать вместо этого «независимые» отношения?

Одна конкретная проблема, с которой я столкнулся, заключается в том, что EF (по крайней мере, дизайнер) требует, чтобы все PK в одной таблице были сопоставлены со всеми столбцами PK в любой связанной таблице. Это не имеет смысла для меня, так как пример, который я привел, никогда не будет работать с учетом этого ограничения. Я пытаюсь заставить Items наследовать от ItemID. Я получаю ошибку:

Ошибка 3003: проблема в отображении фрагменты, начинающиеся со строки 170: все ключевые свойства (ItemID.ClientID, ItemID.ItemID) EntitySet ItemID должен быть сопоставлен со всеми ключами свойства (Items.ClientID, Items.ItemID, Items.Version) таблицы Пункты.

Я искал все, что могу найти по этой теме, и никто не ответил на эти вопросы для меня. Я ценю любую помощь. Спасибо.

1 Ответ

0 голосов
/ 12 октября 2010

Ошибка, которую вы получаете от своего EDM, связана с тем, что EF поддерживает наследование, только если оба объекта имеют одинаковые первичные ключи (следовательно, отношение один к одному в базе данных), поэтому вы не можете иметь наследование между этими двумя объектами. согласно текущей схеме.
Однако я не вижу проблемы с наличием связи «один ко многим» между сущностями ItemID и Items, и я считаю, что это поведение EF по умолчанию при обновлении модели из базы данных.

Пожалуйста, посмотрите на этот пост для получения дополнительной информации: Entity Framework, наследование TPT

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