Почему я все еще получаю InvalidOperationException, вызывающий хранимую процедуру, даже если я сделал запрос AsEnumerable? - PullRequest
0 голосов
/ 27 января 2020

Я только что обновился до tnet core 3.1, и поэтому мне пришлось изменить FromSql на FromSqlInterpolated или FromSqlInterpolated.

. Я использую это для вызова хранимой процедуры. который является рекурсивным sql для получения иерархии элементов (я использую это для проверки циклической проверки БД).

Первоначальный вызов Entity Framework был

var groupParentUsers = userContext.Groups.FromSql("EXEC [GetParentGroupsHierarchy] {0}", group.ParentGroupId).ToList();
var userInParentsHierarchy = groupParentUsers.FirstOrDefault(a => a.Id == group.Id);
if (userInParentsHierarchy != null && userInParentsHierarchy.Id != group.ParentGroupId)
{
  throw new ParentGroupAllocationCircularReferenceException("The group being updated is one of the new groups parent users", group);
}

, который Я перешел на использование FromSqlInterpolated и добавление AsEnumerable () по запросу

var groupParentUsers = userContext
  .Groups
  .FromSqlInterpolated($"EXEC [GetParentGroupsHierarchy] {group.ParentGroupId}")
  .AsEnumerable();

var userInParentsHierarchy = groupParentUsers.FirstOrDefault(a => a.Id == group.Id);

, отладчик пропускает вызов sp, но когда он пытается что-то сделать с данными, я получаю следующее исключение (из моего модульного теста)

Ожидаемый: typeof (Symphony.User.WebApi.Data.Exception.ParentGroupAllocationCircularReferenceException) Actual: typeof (System.InvalidOperationException): FromSqlRaw или FromSqlInterpolated был вызван с некомпозируемым запросом SQL с сочинять над ним. Попробуйте выполнить AsEnumerable после метода FromSqlRaw или FromSqlInterpolated для выполнения композиции на стороне клиента.

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

У меня есть решение, но это означало бы изменение моего SP на функции, чтобы вызов был SELECT * FROM [dbo].[MyFunction] (group.ParentGroupId) Я действительно не хочу этого делать:)

...