<FieldName> не является членом типа <Type>в загруженных схемах. - PullRequest
1 голос
/ 22 июня 2011

У меня есть следующая функция, определенная в CSDL моего EDMX.

<Function Name="GetSprintDuration" ReturnType="Edm.Decimal">
     <Parameter Name="sprintId" Type="Edm.Int32" />
     <DefiningExpression>
          SUM( SELECT VALUE h.Duration
          FROM ApplicationEntities.Hours as h
          WHERE h.Story.Project.SprintId = sprintId)
     </DefiningExpression>
</Function>

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

[EdmFunction("ApplicationModel", "GetSprintDuration")]
public decimal? GetSprintDuration(int sprintId)
{
    return this.QueryProvider.Execute<decimal?>(Expression.Call(
    Expression.Constant(this),
    (MethodInfo)MethodInfo.GetCurrentMethod(),
    Expression.Constant(sprintId, typeof(int))));
}

Когда я вызываю этот метод, я получаюследующая ошибка:

«SprintId» не является членом типа «ApplicationModel.Project» в загруженных в настоящий момент схемах.

Ошибка генерируется, когда QueryProvider.Execute вызывается:

Line 17:         public decimal? GetSprintDuration(int sprintId)
Line 18:         {
Line 19:             return this.QueryProvider.Execute<decimal?>(Expression.Call(
Line 20:                 Expression.Constant(this),
Line 21:                 (MethodInfo)MethodInfo.GetCurrentMethod(),

Если я изменю функцию на что-то вроде:

<Function Name="GetSprintDuration" ReturnType="Edm.Decimal">
     <Parameter Name="sprintId" Type="Edm.Int32" />
     <DefiningExpression>
          SUM( SELECT VALUE h.Duration
          FROM ApplicationEntities.Hours as h
          WHERE h.HourId != 0)
     </DefiningExpression>
</Function>

Мое приложение работает как обычно ... по какой-то причине у меня нет доступа кполная модель сущности.Есть ли способ сделать так, чтобы я мог получить доступ к полной модели сущности ИЛИ это невозможно?

Заранее спасибо!

1 Ответ

1 голос
/ 23 июня 2011

С помощью @ Henk Holterman Мне удалось выяснить мою проблему ... Я не осознавал, что ESQL поддерживает JOINS, поэтому вот как выглядит рабочий код:

   <Function Name="GetSprintDuration" ReturnType="Edm.Decimal">
      <Parameter Name="sprintId" Type="Edm.Int32" />
      <DefiningExpression>
        SUM( SELECT VALUE h.Duration
        FROM ApplicationEntities.Hours as h 
        JOIN ApplicationEntities.Stories as s on h.StoryId == s.StoryId
        WHERE s.SprintId == sprintId )
      </DefiningExpression>
    </Function>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...