Поделиться через


Поставщик отражения (службы WCF Data Services)

Помимо предоставления данных из модели данных через Entity Framework, службы Службы WCF Data Services поддерживают предоставление данных, не определенных строго в модели на основе сущностей. Поставщик отражения предоставляет данные в классах, возвращаемые типы которых реализуют интерфейс IQueryable. Службы Службы WCF Data Services используют отражение для определения модели данных для таких классов и поддерживают преобразование запросов к таким ресурсам на основе адресов в интегрированные в язык запросы (LINQ) к предоставляемым типам IQueryable.

Dd723653.note(ru-ru,VS.100).gifПримечание
Метод AsQueryable позволяет получить интерфейс IQueryable любого класса, реализующего интерфейс IEnumerable.Это позволяет использовать большинство типов универсальных коллекций в качестве источника данных для службы данных.

Поставщик отражения поддерживает иерархии типов. Дополнительные сведения см. в разделе Как создать службу данных с помощью поставщика отражения (службы WCF Data Services).

Выведение модели данных

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

  • Контейнер сущностей — класс, предоставляющий данные в виде свойств, возвращаемых экземпляром IQueryable. При обращении к модели данных на основе отражения контейнер сущностей представляет корневой объект службы. В одном пространстве имен поддерживается только один класс контейнера сущностей.

  • Наборы сущностей — свойства, возвращаемые экземплярами IQueryable, которые рассматриваются как наборы сущностей. Наборы сущностей непосредственно адресуются в запросе как ресурсы. Только одно свойство контейнера сущностей может возвращать экземпляр IQueryable данного типа.

  • Типы сущностей — тип T объекта IQueryable, возвращаемого набором сущностей. Классы, являющиеся частью иерархии наследования, преобразуются поставщиком отражения в эквивалентную иерархию типов сущностей.

  • Ключи сущностей — каждый класс данных, определяющий тип сущности, должен иметь ключевое свойство. Это свойство помечается с помощью атрибута DataServiceKeyAttribute ([DataServiceKeyAttribute]).

    Dd723653.note(ru-ru,VS.100).gifПримечание
    Атрибут DataServiceKeyAttribute следует применять только к сущностям, которые могут быть использованы для уникальной идентификации экземпляра типа сущности.При применении к свойству навигации этот атрибут не учитывается.

  • Свойства типов сущностей — помимо ключа сущности, поставщик отражения рассматривает их как доступные свойства (не индексаторы) класса, представляющего тип сущности, следующим образом.

    • Если свойство возвращает примитивный тип, оно рассматривается как свойство типа сущности.

    • Если свойство возвращает тип, который также является типом сущности, то оно рассматривается как свойство навигации, представляющее конец «один» связи «многие к одному» или «один к одному».

    • Если свойство возвращает интерфейс IEnumerable типа сущности, оно рассматривается как свойство навигации, представляющее конец «многие» связи «один ко многим» или «многие ко многим».

    • Если тип возвращаемого значения свойства — тип значения, то свойство представляет сложный тип.

Dd723653.note(ru-ru,VS.100).gifПримечание
В отличие от модели данных, основанной на реляционной модели сущностей, модели, основанные на поставщике отражения, не поддерживают реляционные данные.Для предоставления реляционных данных через службы Службы WCF Data Services необходимо использовать Entity Framework.

Сопоставление типов данных

Если модель данных выводится из классов .NET Framework, типы-примитивы модели данных сопоставляются с типами данных .NET Framework следующим образом.

Тип данных .NET Framework Тип модели данных

Byte []

Edm.Binary

Boolean

Edm.Boolean

Byte

Edm.Byte

DateTime

Edm.DateTime

Decimal

Edm.Decimal

Double

Edm.Double

Guid

Edm.Guid

Int16

Edm.Int16

Int32

Edm.Int32

Int64

Edm.Int64

SByte

Edm.SByte

Single

Edm.Single

String

Edm.String

Dd723653.note(ru-ru,VS.100).gifПримечание
Типы значений платформы .NET Framework, допускающие значения null, сопоставляются с теми же типами модели данных, что и соответствующие типы значений, не принимающие значения NULL.

Включение обновлений в модели данных

Чтобы разрешить обновление данных, представляемых этим типом модели данных, поставщик отражения определяет интерфейс IUpdatable. Этот интерфейс описывает метод сохранения обновлений, предоставляемых службой данных типов. Чтобы включить обновление ресурсов, определенных в модели данных, класс контейнера сущностей должен реализовать интерфейс IUpdatable. Пример реализации интерфейса IUpdatable см. в разделе Как создать службу данных с помощью источника данных LINQ to SQL (службы WCF Data Services).

Интерфейс IUpdatable требует реализации следующих элементов для распространения обновлений источника данных с помощью поставщика отражения.

Элемент Описание

AddReferenceToCollection

Предоставляет функциональность добавления объекта в коллекцию связанных объектов, доступ к которым осуществляется через свойство навигации.

ClearChanges

Предоставляет функциональность отмены отложенных изменений данных.

CreateResource

Предоставляет функциональность создания нового ресурса в указанном контейнере.

DeleteResource

Предоставляет функциональность удаления ресурса.

GetResource

Предоставляет функциональность извлечения ресурса, идентифицированного указанным запросом и именем типа.

GetValue

Предоставляет функциональность возврата значения свойства ресурса.

RemoveReferenceFromCollection

Предоставляет функциональность удаления объекта из коллекции связанных объектов, доступ к которым осуществляется через свойство навигации.

ResetResource

Предоставляет функциональность обновления указанного ресурса.

ResolveResource

Предоставляет функциональность возврата ресурса, представленного экземпляром определенного объекта.

SaveChanges

Предоставляет функциональность сохранения всех отложенных изменений.

SetReference

Предоставляет функциональность задания ссылки на связанный объект с помощью свойства навигации.

SetValue

Предоставляет функциональность задания значения свойства ресурса.

Обработка параллелизма

Службы WCF Data Services поддерживает модель оптимистичного параллелизма, позволяя определять маркер параллелизма для сущности. Этот маркер параллелизма, включающий одно или несколько свойств сущности, используется службой данных для определения, произошло ли изменение в запрашиваемых, обновляемых или удаляемых данных. Когда значения маркера, полученные из eTag в запросе, отличаются от текущих значений сущности, служба данных вызывает исключение. ETagAttribute применяется к типу сущности для определения маркера параллелизма в поставщике отражения. Маркер параллелизма не может содержать ключевое свойство или свойство навигации. Дополнительные сведения см. в разделе Making Changes to Data (WCF Data Services).

Использование запросов LINQ to SQL с помощью поставщика отражения

Поскольку Entity Framework изначально поддерживается по умолчанию, это рекомендованный поставщик данных для работы с реляционными данными в службах Службы WCF Data Services . Однако для работы с запросами LINQ к классам SQL можно использовать и поставщик отражения. Результирующие наборы Table, возвращаемые методами класса DataContext, сформированного реляционным конструктором объектов LINQ to SQL, реализуют интерфейс IQueryable. Это позволяет поставщику отражения получать доступ к таким методам и возвращать данные сущностей с сервера SQL Server при помощи сформированных классов LINQ to SQL. Однако, поскольку запрос LINQ to SQL не реализует интерфейс IUpdatable, необходимо добавить разделяемый класс, расширяющий имеющийся разделяемый класс DataContext и определяющий реализацию интерфейса IUpdatable. Дополнительные сведения см. в разделе Как создать службу данных с помощью источника данных LINQ to SQL (службы WCF Data Services).

См. также

Основные понятия

Поставщики служб данных (службы WCF Data Services)