2013-09-03 1 views
0

Можно ли определить подзапрос в определяемой моделью функции в Entity Framework? У нас есть ситуация, когда у нас есть объект клиента, который имеет историю имен в другой таблице. Мы хотим вернуть самое текущее имя как часть этого объекта клиента.Определить подзапрос в функции, определяемой моделью в инфраструктуре Entity

Модель определенная функция может выглядеть примерно так:

<Function Name="CurrentName" ReturnType="Edm.String"> 
    <Parameter Name="e" Type="Model.Customer"/> 
    <DefiningExpression> 
     (select top(1) n.LegalName from Entities.CustomerNames as n order by n.EffectiveDate Desc) 
    </DefiningExpression> 
    </Function> 

К сожалению, выше не работает. Мы получаем ошибку:

тип результата «Edm.String», указанный в объявлении функции «SNCCModel.CurrentLegalName» не соответствует типу результата «Transient.collection [Transient.rowtype (LEGAL_NAME , Edm.String (Nullable = True, DefaultValue =, MaxLength = 512, Unicode = False, FixedLength = False))] определения функции

Есть предложения? Должно ли это работать? Извините, но рефакторинг нашей модели данных для хранения самого последнего имени в таблице клиентов не является вариантом.

Благодаря, Rick

ответ

0

попробовать следующий запрос:

ANYELEMENT (Выберите значение верхнего (1) n.LegalName от Entities.CustomerNames как п порядка по n.EffectiveDate Desc)

В принципе запрос возвращал набор строк, а ожидаемый тип результата - String. Указав выделение VALUE, вы избавитесь от строки (и просто запустите сборку строк), и, обернув ее все в ANYELEMENT, вы сгладите структуру и верните только один элемент из коллекции результатов (в данном случае это единственный элемент) ,