Share via


개체 펴기(EntityDataSource)

경우에 따라 EntityDataSource 컨트롤은 엔터티 둘레에 래퍼를 만듭니다. 이 항목에서는 래퍼가 만들어지는 시나리오를 설명하고 래퍼에서 엔터티 개체를 가져오는 방법을 보여 줍니다.

EntitySetName 속성을 사용하여 EntityDataSource 컨트롤을 초기화하면 EntityDataSource는 결과의 각 엔터티 인스턴스를 ICustomTypeDescriptor 형식의 개체에 래핑합니다. 래퍼 개체는 복합 형식의 개체 및 관계에 참가하는 개체에 양방향 데이터 바인딩을 사용하도록 설정하는 PropertyDescriptor를 노출합니다. PropertyDescriptor는 외래 키 정보에 대한 액세스도 제공합니다. 따라서 GridView 컨트롤의 RowDataBound 이벤트 인수에서 원래 엔터티 개체를 가져오려고 시도하면 엔터티 개체 대신 래퍼 개체를 가져오게 됩니다.

참고

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