Моделирование множественных ассоциаций объектов в LINQ-To-SQL - PullRequest
0 голосов
/ 06 января 2011

Я просто хотел задать этот вопрос, чтобы проверить работоспособность моего дизайна ORM, чтобы убедиться, что то, как я это делаю, не является сумасшедшим анти-паттерном.Моя ситуация такова, что в моем дизайне есть класс, который связан с 4 другими классами.Поэтому, если бы у меня были классы A, B, C, D и E, классы B, C, D и E имели бы отношение «Has-An» к классу A. В настоящее время единственный способ, о котором я знаю в LINQ-To-Sql, чтобы определить отношение, путем создания столбца внешнего ключа в A для каждого объекта, который имеет отношение к нему.Хотя это работает, недостатком является то, что в базе данных есть четыре столбца, где три столбца всегда будут нулевыми.Это просто ограничение инструментов ORM?Буду признателен за любые советы или предложения.

1 Ответ

0 голосов
/ 06 января 2011

Так что я забыл точное название для этого типа ассоциации, но я считаю, что это называется Полиморфная ассоциация.Насколько я понимаю, LINQ Entities не поддерживает полиморфные ассоциации так, как это делает Ruby on Rails, но вы хотели бы сделать следующее:

  1. Создание таблиц A, B, C, D, Eбез определения их взаимосвязей друг с другом.
  2. Назначьте столбец UniqueIdentifier для каждой таблицы (это GUID).
  3. Создайте таблицу "Relationships" (вероятно, вы хотите создатьлучшее имя.
  4. Таблица отношений будет иметь два столбца: что-то вроде Source и Destination, и оба будут иметь тип GUID или UniqueIdentifier (я забыл, как MSSQL-сервер их называет).Плохая часть заключается в том, что MSSQL не может навязать отношение внешнего ключа (вот почему сущности LINQ не поддерживают его). Так что это должно быть сделано в вашей бизнес-логике или в StoredProcedure.Это дает вам возможность добавить тип F и использовать ту же таблицу для выражения отношения Has-A между F и A.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...