Entity Framework/WCF - Безопасный / умный, чтобы отправить entityObjects клиенту Silverlight?
Я немного запутался здесь.
У меня есть мои классы POCO, созданные с помощью структуры сущностей, смоделированной из базы данных.
Очевидно, что я хотел бы также использовать эти классы в клиенте (и любая бухгалтерия по ним была бы полезна, если бы я хотел отправить их обратно и повторно присоединить)
Я просмотрел классы, сгенерированные для справки службы WCF, и кажется, что это довольно многословно для отправки по Интернету, но не похоже, что там что-то рискованное с точки зрения безопасности.
И все же я не могу найти в Интернете ничего о том, как это сделать. Я иду по совершенно ужасному пути?
Помогите?
РЕДАКТИРОВАТЬ: я полагаю, что они технически они не классы POCO, если я сгенерировал их с помощью EntityFramework из базы данных; просто чтобы устранить любую возможную путаницу.
1 ответ
На этот вопрос сложно ответить, не зная более подробной информации о вашей системе, но, в конечном счете, правильный путь к указанию объектов EF в сервисном контракте WCF или нет - зависит от объема и требований разрабатываемого вами приложения.
Возможно, задайте себе следующие вопросы, которые, мы надеемся, будут определять ваше решение:
- Вполне вероятно, что ваша реляционная модель и объектная модель должны будут расходиться? Это может быть обусловлено рядом факторов, но чаще всего требования к отчетности могут приводить к определенному дизайну схемы базы данных (для производительности), который вы не хотите отражать в объектной модели приложения. Использование созданных БД объектов EF на всех уровнях приложения может связать вас с этим дизайном базы данных.
- Вы обеспокоены тем, что изменения в вашей схеме базы данных могут потребовать от ваших клиентов перегенерировать свои сервисные ссылки? Опять же, использование сущностей EF на всех уровнях вашего приложения означает, что любые изменения, реализованные в вашей схеме БД (независимо от того, относятся ли они к клиенту или нет), могут попасть в интерфейс службы, что может привести к нарушению совместимости клиента с этим интерфейсом
- Является ли производительность проблемой? Как вы упомянули, сгенерированные классы многословны. Вы, вероятно, будете перевозить ненужный багаж по проводам, который может быть оптимизирован.
- Вы обеспокоены раскрытием подробностей реализации вашей схемы базы данных и механизма персистентности в сети и вашим клиентам? Учитывая, что вы сгенерировали модель из базы данных, вероятно, будут свойства, которые предоставляют информацию о вашей схеме и механизме персистентности, которые являются избыточными с точки зрения клиента.
Таким образом, может быть ограниченное количество случаев, когда раскрытие сущностей EF может быть приемлемым, но, как правило, я бы разработал для изменения и реализовал некоторый шаблон, в котором вы отображаете свои сущности EF в облегченные "невосприимчивые" POCO в вашем хранилище. слой. EF 4.0 предоставляет возможность кодировать контекст, который возвращает POCO, но в моем текущем проекте мы используем контекст codegen, а затем используем automapper для сопоставления сущностей EF нашим контрактам на данные. За пределами уровня хранилища ничего не известно о сущностях EF, и я чувствую, что это обеспечивает более удобную и надежную конструкцию.