WCF, платформа объекта и контракты данных

Никакое различие как таковое.
Convert.ToInt32() вызовы int.Parse() внутренне

За исключением одной вещи Convert.ToInt32() возвраты 0, когда аргумент null

Иначе оба, работают тот же путь

7
задан Community 23 May 2017 в 10:27
поделиться

3 ответа

Знаете ли вы, что вашим объектам не нужно сопоставлять один в один с базой данных? В частности, вы можете опускать столбцы или даже целые таблицы, которые не имеют отношения к делу.

Модель сущности задумана как концептуальная модель. Вы можете легко создать набор сущностей для доступа к одному набору клиентов (возможно, веб-сервисам) и другому набору, сопоставив его с той же базой данных, которая предназначена для другого клиента (возможно, веб-приложения).

На с другой стороны, я всегда рекомендую никогда не раскрывать объекты Entity Framework через веб-службу. К сожалению, Microsoft предоставляет свойства, зависящие от реализации, помечая их с помощью [DataMember]. Я только что попробовал это с помощью простой службы, возвращающей SalesOrderHeader из AdventureWorks. Мой клиент получил прокси-версии следующих типов EF:

  • EntityKeyMember
  • StructuralObject
  • EntityObject
  • EntityKey
  • EntityReference
  • RelatedEnd

Это не то, о чем ваши клиенты должны знать.

Я предпочитаю открывать объекты передачи данных и копировать свойства от одного до другого. Очевидно, что это лучше делать путем отражения или генерации кода, чем вручную. Раньше я делал это с помощью генерации кода (шаблоны T4).

Вариант, который я не пробовал, - AutoMapper .

13
ответ дан 6 December 2019 в 10:52
поделиться

Мы используем отдельные классы для объектов DataContract. У нас есть интерфейс с одним методом, ToContract (), и все наши сущности реализуют этот интерфейс в файле частичного класса. Это дополнительная работа, и это шаблон, но кажется, что это самый простой способ добиться разделения и детализации контроля, которые нам нужны.

3
ответ дан 6 December 2019 в 10:52
поделиться

В основном я вижу две вещи, которые вы можете сделать:

  1. Либо вы удалите те элементы, которые не хотите раскрывать, из DataContract, вручную удалив атрибут [DataMember] для этих элементов ; в этом случае WCF не будет сериализовать свойства вне
  2. Вы определяете свои собственные классы WCF DataContract только с теми членами, которые вам нужны, и вы придумываете логику для преобразования из ваших EF-сущностей в ваш WCF DataContract, используя, например, что-то вроде AutoMapper для устранения (или, по крайней мере, ограничения) утомительных операций сопоставления между объектами EF и WCF.

Марк

2
ответ дан 6 December 2019 в 10:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: