Изображение, которое у меня есть огромная база данных, в которой хранятся темы и сообщения из разных источников данных, таких как два разных форума. Для каждого источника данных идентификатор объекта (например, ThreadId, PostId ...) является уникальным, но он может вступать в конфликт с идентификатором объекта, полученным из других источников данных. Например, и forum1, и forum2 могут иметь тему с Threadid = 1:
Я использую Linq2Sql и шаблон хранилища для подключения моего приложения к базе данных. Я читал, что составных ключей (между ThreadId и DatasourceId) следует избегать при использовании Linq2Sql. Поэтому я предполагаю, что суррогатный первичный ключ - мой единственный вариант (не так ли):
Темы таблиц:
- UniqueId - int, PK
- DatasourceId - int
- ThreadId - int
- ...
Стол сообщений:
- UniqueId - int, PK
- DatasourceId - int
- PostId - int
- ThreadId - int, FK to Threads.ThreadId
Теперь мой вопрос: сможет ли Linq2Sql отобразить отношения 1: 1 между сообщениями и потоками в своих сгенерированных классах?
Что произойдет, если сообщение имеет внешний ключ для Thread.ThreadId и если есть два объекта с одинаковым ThreadId (но, разумеется, с разными DatasourceIds)? Я думаю, что это вернет коллекцию назначенных тем в сообщении - что я не хочу! Могу ли я как-то по-прежнему возвращать одну ветку для каждого поста, которая имеет тот же DatasourceId?