Я только что обновился до 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)
Я действительно не хочу этого делать:)