ich mit WebApi2 und EntityFramework6 einen Dienst entwickle. Ich habe ein Vermächtnis SQLServer DB, die meinen Dienst mit arbeiten müssen.Wie gespeicherte Prozedur von EntityFramework 6 mit ‚hierarchyid‘ Parameter nennen
Die DB-Datentyp stark den ‚hierarchyid‘ verwendet, und diese Art der intern in DB gespeicherten Prozeduren verwendet wird.
Scheint wie EF6 nicht 'hierarchyid' Datentyp unterstützt, so dass ich this fork verwendet, die Unterstützung für 'hierarchyid' hinzugefügt.
Während das Abrufen von der DB mit dem 'hierarchyid' Typ funktioniert, ist mein Problem mit den Stored Procedures, die eine 'hierarchyid' als Parameter benötigen.
Die gespeicherte Prozedur sieht wie folgt aus:
CREATE PROCEDURE [dbo].[GetSomethingByNodeId]
(
@startingRoot HIERARCHYID
,@return HIERARCHYID OUTPUT
)
Mein Client-Code diese gespeicherte Prozedur zum Aufrufen wie folgt aussieht:
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();
Aber leider diese Abfrage Aufruf löst eine Ausnahme, die sagt:
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.
Irgendwelche Ideen, wie ich das schaffen kann?
Hier im Dunkeln geschossen ... Kannst du den Sproc auf einen Nvarchar umstellen und dann den Wert innerhalb des Sprocs in eine HirachyId umwandeln? – SimonGates