LINQ to SQL вопрос наследования - PullRequest
0 голосов
/ 23 июня 2009

Я делаю тест ниже, чтобы попытаться узнать больше о LINQ to SQL.

У меня есть таблица действий, которая содержит идентификатор активности, идентификатор родителя, тип.

Тип используется в качестве значения дискриминатора, чтобы указать, является ли это действием, задачей или проектом.

У меня есть класс Activity, Task и Project, которые наследуют от Activity, для Task кажется, что наследовать от Project семантически неправильно, но для сокращения избыточных данных это казалось лучшим способом, я могу либо изменить имя этого класса или разделить их.

У класса Activity нет свойства parentId, но класс Task будет использовать parentId в качестве projectId для связи с классом Project.

Я приложил снимок экрана с таблицами и моим dbml, а также диаграммой классов. Из диаграммы классов видно, что это лишь более простая реализация. У меня нет подзадач, задач в разных проектах и ​​т. Д. Я Я также игнорирую пользовательскую часть этой системы, потому что это всего лишь прототип. Поэтому игнорируйте класс менеджера, и я не буду использовать роли. Я использую только жестко закодированных тестовых пользователей.

У меня есть список вещей, о которых я хотел спросить. 1. Все мои задачи требуют ProjectId, так как это parentID из класса активности. Как эта установка работает с классом Project? Как вы можете видеть, в данный момент между ними нет никакой связи. Должен ли я создавать свойство для Project? как это работает, когда ActivityId потенциально является также идентификатором проекта, когда речь идет о классе Project?

  1. Вы можете видеть класс ActivityTime, который должен быть только для отслеживания времени, затраченного на задачу, вы можете видеть, что это может быть связано с таблицей UserActivity, но мне интересно, как это делается только для задач, а не для всех Деятельность?

  2. Вы также можете видеть активность проекта, извините, этот класс также должен наследовать от класса Activity, который я пропустил при загрузке изображения. Это относится к таким вехам, когда деятельность, в которой нет времени или пользователя, должна иметь связанный проект.

У кого-нибудь есть идеи о том, чего я пытаюсь достичь? я захожу слишком далеко со всем этим? Спасибо за любую помощь :) Извините, если не хватает подробностей, я старался быть кратким, не вдаваясь в полный список бизнес-требований, которые я имел в виду для этой тестовой системы.

РЕДАКТИРОВАТЬ: Я просто констатирую очевидное, но, пожалуйста, скопируйте расположение изображения, чтобы лучше рассмотреть.

альтернативный текст http://img134.imageshack.us/img134/1199/tmss.jpg

Ответы [ 2 ]

0 голосов
/ 02 июля 2009

Я нашел решение этой проблемы, используя диаграмму сущностей для LINQ to SQL, как показано выше.

Где я создал базовый абстрактный класс деятельности, от которого наследуются деятельность, задача, проект и проект.

Кроме того, диаграмма сущностей, по-видимому, требует, чтобы вы добавляли свойства к унаследованным классам, чтобы иметь возможность использовать их для связей между классами. В итоге я сделал именно это и сделал исходный ActivityId из базового класса активности частной собственностью.

0 голосов
/ 23 июня 2009

Ваш класс занятий - это просто способ собрать вместе различные виды деятельности. Чтобы не допустить загрязнения остальной части вашей схемы, я бы отделил ее от других ваших классов. Это освободит ваш разум, чтобы сосредоточиться на проектах, задачах и отчетах с учетом их собственных достоинств в структуре схемы.

Как только вы поймете это, вы можете вернуться и добавить свой класс деятельности. Назовите это «сквозной» проблемой, если хотите. На уровне таблицы это будет выглядеть примерно так:

Table:  Activities
Fields:    ActivityID       PK Int Identity
           ActivityType     Int  <-- tells you the originating table
           OriginatingID    Int  <-- from the PK of the originating table
           Description      ..etc.

Время отслеживания имеет свою собственную таблицу / класс.

Вам может быть интересно, как я могу провести линии между моим классом Деятельности и другими моими классами в конструкторе. Вы не Вы можете делать произвольные соединения с другими таблицами / классами по мере необходимости, используя Linq.

Если вы используете шаблон репозитория, вы можете включить в свой репозиторий код, который автоматически добавляет или обновляет записи в классе «Действия», когда вызывающий абонент обновляет проект, задачу, отчет и т. Д.

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