ИМХО это слишком сложно.Почему у вас есть объект POCO для сохранения и отдельный объект для работы с данными, загруженными в объект POCO?Звучит так, как будто ваше приложение перегружено.
ORM означает объектно-реляционное отображение.Это означает отображение между миром отношений и предметным миром.Обычно это также можно перевести как отображение между базой данных и вашими бизнес-объектами.Поэтому вы должны использовать ваши объекты POCO в качестве бизнес-объектов.В этом весь смысл использования POCO.Если вы не хотите использовать их как бизнес-объекты, они вам не нужны, и вы можете напрямую использовать объекты-сущности по умолчанию.
Если вы хотите использовать POCO в качестве бизнес-объекта, просто позвольте EF сгенерировать эти POCO для вас.и добавьте частичный класс к каждому POCO, определяя ваши методы.
Кстати.Ваш бизнес-объект на самом деле выглядит как реализация шаблона Active Record .Если вы хотите использовать этот паттерн, возможно, вам следует проверить Windsor Active Record , который основан на вершине NHibernate.
Редактировать:
Хорошо.Вы можете использовать свои классы вместо сгенерированных объектов POCO.
Один из способов - отказаться от EFv4 и EDMX и проверить новый EFv4.1 и его новый свободный API (он же код-первый) для отображения.Это полностью для отдельного вопроса или просто используйте поиск здесь на SO.
Вы можете сделать это и с EDMX.Есть несколько основных правил, которым вы должны следовать, чтобы заставить эту работу работать, потому что все это сделано соглашениями об именах.Поскольку у вас уже есть классы, вы должны изменить это в файле EDMX, чтобы концептуальная модель совпадала с вашими бизнес-объектами:
- Каждый бизнес-объект, который должен быть сохранен или загружен, должен иметь сущность в концептуальной модели
- Сущность должна иметь то же имя, что и бизнес-объект.Вы также должны правильно настроить объект в окне свойств (аннотация, уровень доступа и базовый объект должны быть такими же, как в вашем бизнес-объекте)
- Каждое сохраненное свойство в бизнес-объекте должно иметь свойство в объекте вконцептуальная модель.Опять же, вы должны правильно настроить каждое свойство (доступность получателя и установщика, тип, обнуляемый и т. Д.).
EDMX состоит из трех слоев:
- SSDL - описаниебаза данных.Это почти всегда генерируется, и вы не можете изменить его непосредственно в конструкторе.
- CSDL - описание сущностей, которые должны совпадать с вашими бизнес-объектами.Это то, что вы модифицируете в конструкторе.Вы можете переименовать поля по своему желанию.
- MSL - отображение между SSDL и CSDL.Если вы откроете контекстное меню для любого объекта в конструкторе, вы увидите отображение таблицы.Откроется окно с определением сопоставления между CSDL и SSDL.
Это базовые правила, но, поскольку у вас уже есть бизнес-объекты, вы, скорее всего, найдете ситуации, когда их будет сложно отобразить.Лучший способ - просто задать этот конкретный вопрос.Скорее всего, речь пойдет о некоторых сложных свойствах, свойствах навигации или наследовании.