我正在使用WebApi2和EntityFramework6开发一个服务。我必须处理一个遗留的SQLServer数据库。
该数据库大量使用'hierarchyid'数据类型,并且此类型在数据库存储过程中被内部使用。
似乎EF6不支持'hierarchyid'数据类型,所以我使用了this fork来增加对'hierarchyid'的支持。
虽然从数据库中检索'hierarchyid'类型的数据运行良好,但我的问题在于需要'hierarchyid'作为参数的存储过程。
存储过程如下:
该数据库大量使用'hierarchyid'数据类型,并且此类型在数据库存储过程中被内部使用。
似乎EF6不支持'hierarchyid'数据类型,所以我使用了this fork来增加对'hierarchyid'的支持。
虽然从数据库中检索'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.
有什么想法可以让这个工作?