Бизнес-объекты, уровень доступа к данным — циклический справочник

Я новичок в EF4 и стараюсь следовать инструкциям как можно лучше, поэтому я решил пойти по маршруту POCO и поместил классы POCO в свой собственный проект. Я добавил классы репозитория в проект DataAccess, и, конечно же, проект DataAccess ссылается на проект POCO.

В настоящее время я добавляю бизнес-функциональность к классам POCO и столкнулся с проблемой, когда определенный метод одного из объектов POCO создает кучу других объектов POCO, и это круто. НО, объекты POCO, которые он создает, уже находятся в базе данных, поэтому знайте, что мне нужен мой проект BusinessEntity для ссылки на проект DataAccess, который, конечно же, создает циклическую ссылку.

Любое руководство в этом пространстве будет высоко оценено.


person BenBuckland    schedule 20.01.2011    source источник
comment
Можете ли вы предоставить метод, который создает кучу других объектов POCO? Этого не должно случиться. Методы POCO должны быть специфичными для домена/бизнеса и не иметь ничего общего с данными. Если вы начнете работать с данными, они перестанут быть POCO.   -  person RPM1984    schedule 21.01.2011
comment
Итак, у меня есть объект Share, как в ценной бумаге. Я реализовал метод Split, который добавляет новый объект POCO Event в Share.Events. Событие имеет тип, который является существующей записью в БД, он извлекает этот EventType, который мне нужен для вызова DAL.   -  person BenBuckland    schedule 21.01.2011
comment
@BenBuckland - у вас не должно быть этого кода. Ваш DAL/репозиторий должен установить это свойство. Поскольку вы используете EF4, вы можете с готовностью загружать события при захвате общего ресурса: например, var share = ctx.Shares.Include("Events"), и EF автоматически заполнит события.   -  person RPM1984    schedule 21.01.2011
comment
@ RPM1984 - После того, как я добавил событие, я точно смогу его вернуть, но как насчет создания нового события и связанного с ним существующего объекта EventType?   -  person BenBuckland    schedule 21.01.2011
comment
если вы ссылаетесь на новое событие (например, не в наборе базы данных), то все, что создает это событие, должно настроить общие ресурсы. POCO не должны осознавать себя. Если у вас есть веб-страница, которая создает событие, когда вы отправляете форму, сервер должен создать объект события, поделиться и сохранить этот объект через DAL.   -  person RPM1984    schedule 21.01.2011
comment
@ RPM1984 RPM1984 Я согласен с вами в отношении нового события, но у события есть EventType, который существует в БД. Итак, я могу создать новое событие и «подключить» это событие к общему ресурсу, но как мне связать EventType с событием, учитывая, что EventType — это объект, который уже был сохранен в БД?   -  person BenBuckland    schedule 21.01.2011
comment
@BenBuckland - является ли EventType отдельным объектом в вашем EDMX? Становится очень трудно визуализировать происходящее. Добавление снимка экрана вашего дизайнера EDMX к этому вопросу очень помогло бы.   -  person RPM1984    schedule 21.01.2011
comment
@ RPM1984 - Да, это отдельная сущность. Позвольте мне сделать снимок экрана.   -  person BenBuckland    schedule 21.01.2011


Ответы (1)


Надеюсь, я правильно понимаю вашу проблему, но похоже, что вы можете использовать маршрут типа DTO (объекты передачи данных). Я сам новичок в EF, но в настоящее время работаю над проектом EF, WCF, WinForms. У меня есть объекты контракта для моей службы WCF, которые я использую для отправки данных обратно клиенту. Я сопоставляю свойства своих объектов EF с объектами DTO на своем бизнес-уровне. Я использую DTO, потому что моему клиенту не нужны все свойства объекта EF. Попробуйте эту ссылку. Я нашел несколько действительно хороших вещей, касающихся структуры проекта. Надеюсь это поможет.

person jonnyb    schedule 20.01.2011