Entity Framework/WCF - Безопасный / умный, чтобы отправить entityObjects клиенту Silverlight?

Я немного запутался здесь.

У меня есть мои классы POCO, созданные с помощью структуры сущностей, смоделированной из базы данных.

Очевидно, что я хотел бы также использовать эти классы в клиенте (и любая бухгалтерия по ним была бы полезна, если бы я хотел отправить их обратно и повторно присоединить)

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

И все же я не могу найти в Интернете ничего о том, как это сделать. Я иду по совершенно ужасному пути?

Помогите?

РЕДАКТИРОВАТЬ: я полагаю, что они технически они не классы POCO, если я сгенерировал их с помощью EntityFramework из базы данных; просто чтобы устранить любую возможную путаницу.

1 ответ

Решение

На этот вопрос сложно ответить, не зная более подробной информации о вашей системе, но, в конечном счете, правильный путь к указанию объектов EF в сервисном контракте WCF или нет - зависит от объема и требований разрабатываемого вами приложения.

Возможно, задайте себе следующие вопросы, которые, мы надеемся, будут определять ваше решение:

  1. Вполне вероятно, что ваша реляционная модель и объектная модель должны будут расходиться? Это может быть обусловлено рядом факторов, но чаще всего требования к отчетности могут приводить к определенному дизайну схемы базы данных (для производительности), который вы не хотите отражать в объектной модели приложения. Использование созданных БД объектов EF на всех уровнях приложения может связать вас с этим дизайном базы данных.
  2. Вы обеспокоены тем, что изменения в вашей схеме базы данных могут потребовать от ваших клиентов перегенерировать свои сервисные ссылки? Опять же, использование сущностей EF на всех уровнях вашего приложения означает, что любые изменения, реализованные в вашей схеме БД (независимо от того, относятся ли они к клиенту или нет), могут попасть в интерфейс службы, что может привести к нарушению совместимости клиента с этим интерфейсом
  3. Является ли производительность проблемой? Как вы упомянули, сгенерированные классы многословны. Вы, вероятно, будете перевозить ненужный багаж по проводам, который может быть оптимизирован.
  4. Вы обеспокоены раскрытием подробностей реализации вашей схемы базы данных и механизма персистентности в сети и вашим клиентам? Учитывая, что вы сгенерировали модель из базы данных, вероятно, будут свойства, которые предоставляют информацию о вашей схеме и механизме персистентности, которые являются избыточными с точки зрения клиента.

Таким образом, может быть ограниченное количество случаев, когда раскрытие сущностей EF может быть приемлемым, но, как правило, я бы разработал для изменения и реализовал некоторый шаблон, в котором вы отображаете свои сущности EF в облегченные "невосприимчивые" POCO в вашем хранилище. слой. EF 4.0 предоставляет возможность кодировать контекст, который возвращает POCO, но в моем текущем проекте мы используем контекст codegen, а затем используем automapper для сопоставления сущностей EF нашим контрактам на данные. За пределами уровня хранилища ничего не известно о сущностях EF, и я чувствую, что это обеспечивает более удобную и надежную конструкцию.

Другие вопросы по тегам