Спрямление объектов (EntityDataSource)

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

При инициализации элемента управления EntityDataSource с помощью свойства EntitySetName тип EntityDataSource упаковывает каждый получающийся экземпляр сущности в объект типа ICustomTypeDescriptor. Объект-оболочка предоставляет дескрипторы PropertyDescriptor, обеспечивающие двунаправленную привязку данных для объектов сложных типов и для объектов, участвующих в связи. Дескриптор PropertyDescriptor также предоставляет доступ к сведениям о внешнем ключе. В результате, при попытке получить исходный объект сущности, например из аргументов события RowDataBound элемента управления GridView, вместо объекта сущности будет получен объект-оболочка.

Примечание

Объекты-сущности не будут заключаться в оболочку, если, чтобы задать запрос, возвращающий объекты-сущности или проекцию конкретных свойств, используется свойство CommandText, или если, чтобы создать запросы проекций, используется свойство Select.

В следующем коде показано, как получить объект-сущность из объекта-оболочки.

protected void ProductsGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    var entity = dataItem as Product;
    if (entity == null)
    {
        var td = dataItem as ICustomTypeDescriptor;
        if (td != null)
        {
            entity = (Product)td.GetPropertyOwner(null);
        }
    }
}

При использовании платформы .NET Framework версии 4 или более поздней, можно включить в модель свойства внешнего ключа. Во многих случаях это устраняет необходимость в объектах-оболочках. Чтобы отключить создание оболочки, задайте для свойства EnableFlattening значение false. По умолчанию значение свойства EnableFlattening равно true. Если концептуальная модель содержит свойства внешнего ключа и не содержит сложных типов, разработчик источника данных EntityDataSource во время разработки должен задать значение свойства EnableFlattening равным false, чтобы избежать создания объектов-оболочек для сущности.

См. также

Другие ресурсы

Working with Foreign Keys