У меня есть несколько таблиц, которые связаны с использованием ключа с несколькими полями, но в зависимости от того, где развернуто приложение, ключ может отличаться.
Например:
-Customer- -Rep-
CompanyID CompanyID
StoreID StoreID
RepID RepID
CustID
В некоторых случаях клиенты Клиента идентифицируются путем присоединения к CompanyID, StoreID, RepID. В других развертываниях Store ID Представителя будет строкой пробелов, и затем соединение происходит по CompanyID, RepID. Клиент по-прежнему будет иметь значения в StoreID.
В SQL я просто помещаю 'OR StoreID = "" ", где мы объединяемся, в поля StoreID, но я не вижу, как я могу сделать это с помощью структуры сущностей.
Я мог бы установить одну связь для каждой ситуации, а затем использовать соответствующую, но если я не смогу во время выполнения псевдонима имени соответствующей ассоциации, это сделало бы код приложения немного запутанным.
Edit:
Похоже, я могу использовать MetadataWorkspace для создания необходимой ассоциации на лету. Я буду исследовать это.
Edit:
Проблема такого рода может быть решена путем разделения модели на использование разных файлов csdl (где определяются ассоциации) в зависимости от того, какое поведение требуется. См. Ответ MerickOWA и ссылку на статью MSDN. Это приводит к небольшому раздражению, в первую очередь из-за того, что дизайнер не поддерживает его, поэтому вы будете ограничены редактированием файлов XML, а также вам придется контролировать, какой ресурс csdl используется. Csdl указывается в строке подключения EF, которая по умолчанию находится в app.config. Чтобы упростить управление этой строкой (в любом случае мне нужно было контролировать строку подключения к базе данных), я написал служебный класс для построения строки подключения EF. Я основал этот класс на коде, найденном в Исправление конфигурации: Использование Entity Framework в общих библиотеках .