Платформа сущностей задает строку для зависимого столбца без ключа базы данных - PullRequest
0 голосов
/ 11 января 2010

В EF есть способ указать отношение между двумя таблицами, когда в базе данных не определено отношение, а один из связанных столбцов представляет собой конкретную строку / жестко закодированное значение?

Допустим, у меня есть объект Document, и он может иметь различные этапы утверждения и категорию. Мой стол может выглядеть как

DocumentID, DocumentName, DocumentState, DocumentCategory

Со следующими данными документа:

1, некоторый тестовый документ, 0, 0

2, Другой Док, 2, 1

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

LookupKey, LookupValue, LookupText

Со следующими данными, где LookupKey и LookupValue являются первичным ключом (не определен в БД):

DocumentStatus, 0, черновик

DocumentStatus, 1, InReview

DocumentStatus, 2, Final

DocumentCategory, 0, Резюме

DocumentCategory, 1, сопроводительное письмо

Таблицы имеют две взаимосвязи на основе:

DocumentStatus = LookupValue AND LookupKey = "DocumentStatus"

И второе отношение

DocumentCategory = LookupValue AND LookupKey = "DocumentCategory"

Могу ли я определить этот тип отношений в EDMX?

1 Ответ

0 голосов
/ 11 января 2010

Ну, если бы я был на вашем месте, я бы изменил первичный ключ таблицы поиска на составной ключ для lookupKey и LookupValue. Но давайте предположим, что вы не можете изменить структуру базы данных.

Да, вы можете сделать это. По сути, вы собираетесь редактировать секцию SSDL EDMX таким образом, чтобы она была такой же, как если бы у вас был фактический внешний ключ, который бы разработал графический интерфейс. Один из способов сделать это - посмотреть на ассоциацию, основанную на реальном, составном внешнем ключе, и просто ввести эту структуру в свой EDMX. Тем не менее, есть обратная сторона делать это вручную. Когда вы выбираете «Обновить модель из базы данных» в конструкторе графического интерфейса, он будет заменять полный раздел SSDL каждый раз. Это уничтожило бы ваши изменения. Следовательно, более простой способ сделать это - создать отдельную базу данных с реальным внешним ключом для составного первичного ключа в таблице значений поиска, которую вы будете использовать для генерации модели. Эти отдельные базы данных имеют ту же структуру, что и ваша база данных времени выполнения, за исключением того, что она определяет этот бит схемы «более правильно». Вы просто изменяете строку подключения перед обновлением модели из базы данных, генерируете модель, а затем изменяете строку подключения обратно на «реальную» базу данных для выполнения.

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