【发布时间】:2016-08-12 10:29:29
【问题描述】:
我正在使用 WebApi2 和 EntityFramework6 开发服务。 我有一个旧版 SQLServer 数据库,我的服务必须使用它。
该数据库大量使用“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.
有什么想法可以让我完成这项工作吗?
【问题讨论】:
-
在这里暗中拍摄...您可以将 Sproc 更改为除 Nvarchar 之外,然后在 Sproc 内部将值转换为 hirachyId 吗?
标签: sql-server entity-framework stored-procedures entity-framework-6 hierarchyid