Понимание классов Entity Framework - PullRequest
1 голос
/ 28 октября 2010

Я работаю над проектом, в котором нам нужно получить данные из службы WCF.Сервисный код ищет базу данных через Entity Framework.Однако, чтобы предотвратить отправку сгенерированных EF классов через провод в прокси, сгенерированный клиентом, мы решили отобразить значения из классов EF в пользовательские классы DTO, где класс mapper отвечает за выбор значений из сгенерированного EFклассы и положить их в класс DTO.Затем мы используем эти классы DTO для запроса и ответа метода службы.EF строит классы из таблиц, которые связаны друг с другом.Я получаю различные классы со свойствами, которые выглядят примерно так, как показано ниже:

 public global::System.Data.Objects.DataClasses.EntityCollection<SubAttachment> Attachments
    {}

 public global::System.Data.Objects.DataClasses.EntityReference<Gl> GlCodeReference
    {}

К некоторым свойствам добавлено ключевое слово Reference, которое, как я предполагаю, предоставляет EF способ поиска соответствующей таблицы.в этом поле.

Есть ли лучший / иной подход, чем этот подход отображения, если я не хочу передавать тяжелые классы EF?Если нет, то есть ли справочный материал, который поможет мне понять, как классы построены средой Entity.

Спасибо за ваше время

Ответы [ 3 ]

1 голос
/ 28 октября 2010

Поскольку вам нужно получать данные из службы WCF, которая поддерживается EF Framework, вы рассматривали возможность использования OData для предоставления объектов EF? Проверьте некоторые ссылки ниже:

http://www.odata.org/

http://www.hanselman.com/blog/ODataBasicsAtTheAZGroupsDayOfNETWithScottGu.aspx

http://blogs.msdn.com/b/adonet/archive/2010/10/27/entity-framework-and-odata-pdc10.aspx

1 голос
/ 28 октября 2010

Когда вы создаете классы в EF, они имеют атрибуты [DataMember] в своих полях, и это единственные данные, которые передаются по сети. Так что это не так тяжело, как кажется ...

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

Если вы все еще хотите DTO, вы можете также сгенерировать их. Если вы используете EF4.0, у вас есть возможность извлечь файл T4 (.tt), который практически выполняет генерацию кода - используйте его и измените в соответствии с вашими потребностями и сгенерируйте DTO, а также классы сопоставления ...

Чтобы получить файл .tt из edmx (только для EF4): щелкните правой кнопкой мыши свою модель, выберите «Добавить элементы генерации кода» и выберите «Генератор EntityObject», или другой, если вы хотите, чтобы объекты передавались через wcf. Это создаст файл tt, который вы сможете запустить, выполнив команду сохранения (вы получите приглашение, если хотите разрешить его запуск). При сохранении он сгенерирует файл, который точно совпадает с файлом, сгенерированным моделью edmx в случае генератора EntityObject, или у вас будет два файла .tt, если вы используете другой генератор ...

0 голосов
/ 28 октября 2010

Я использовал нечто очень похожее на подход в ссылке ниже вместе с некоторыми пользовательскими частичными классами, и это работало довольно хорошо.

http://blogs.msdn.com/b/adonet/archive/2010/01/25/walkthrough-poco-template-for-the-entity-framework.aspx

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