Zajmuję się tworzeniem usługi przy użyciu WebApi2 i EntityFramework6. Mam starszą SQLServer DB, z którą moja usługa musi pracować.Jak wywołać procedurę przechowywaną z EntityFramework 6 z parametrem "hierarchyid"
Ten DB używa silnie typu danych "hierarchyid", a ten typ jest używany wewnętrznie w procedurach przechowywanych bazy danych.
Wygląda na to, że EF6 nie obsługuje typu danych "hierarchyid", więc użyłem this fork, który dodaje obsługę "hierarchyid".
Podczas pobierania z DB działa wspaniale z typem "hierarchyid", moim problemem jest z procedur przechowywanych, które potrzebują "hierarchyid" jako parametr.
Procedura przechowywana wygląda następująco:
CREATE PROCEDURE [dbo].[GetSomethingByNodeId]
(
@startingRoot HIERARCHYID
,@return HIERARCHYID OUTPUT
)
Mój kod klienta na wywoływanie tej procedury przechowywanej wygląda następująco:
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();
ale niestety wywołanie tego zapytania zgłasza wyjątek, który mówi:
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.
Jakieś pomysły na to, jak to działa?
Strzał w ciemność tutaj ... Czy możesz zmienić Sproca, z wyjątkiem Nvarchar, a następnie odrzucić wartość do hirachyId wewnętrznie w Sprocu? – SimonGates