Я занимаюсь разработкой службы с использованием WebApi2 и EntityFramework6. У меня есть устаревшая база данных SQLServer, с которой моя служба должна работать.Как вызвать хранимую процедуру из EntityFramework 6 с параметром 'hierarchyid'
Эта БД сильно использует тип данных «hierarchyid», и этот тип используется внутри хранимых процедур БД.
Кажется, что EF6 не поддерживает тип данных «hierarchyid», поэтому я использовал this fork, который добавляет поддержку «hierarchyid».
Хотя извлечение из БД отлично работает с типом «иерархии», моя проблема связана с хранимыми процедурами, для которых в качестве параметра требуется «hierarchyid».
Хранимая процедура выглядит следующим образом:
CREATE PROCEDURE [dbo].[GetSomethingByNodeId]
(
@startingRoot HIERARCHYID
,@return HIERARCHYID OUTPUT
)
Мой клиент код для вызова этой хранимой процедуры выглядит следующим образом:
var param1 = new SqlParameter("@startingRoot", new HierarchyId("/"));
var param2 = new SqlParameter{ ParameterName = "@return", Value = 0, Direction = ParameterDirection.Output };
var obj = context.Database.SqlQuery<HierarchyId>("GetSomethingByNodeId" @startingRoot, @return out", param1, param2).ToList();
Но, к сожалению, называя этот запрос генерирует исключение, которое говорит:
An unhandled exception of type 'System.ArgumentException' occurred in EntityFramework.SqlServer.dll
Additional information: No mapping exists from object type System.Data.Entity.Hierarchy.HierarchyId to a known managed provider native type.
Любые идеи о том, как я могу сделать эту работу?
Выстрел в темноте здесь ... Можете ли вы изменить Sproc, за исключением Nvarchar, а затем перевести значение в hirachyId внутри Sproc? – SimonGates