Tôi đang phát triển một dịch vụ bằng WebApi2 và EntityFramework6. Tôi có một SQLServer DB kế thừa mà dịch vụ của tôi phải làm việc.Cách gọi thủ tục lưu sẵn từ EntityFramework 6 với tham số 'hierarchyid'
DB đó đang sử dụng rất nhiều loại dữ liệu 'phân cấp' và loại này được sử dụng nội bộ trong các thủ tục được lưu trữ của DB.
Có vẻ như EF6 không hỗ trợ kiểu dữ liệu 'phân cấp', vì vậy tôi đã sử dụng this fork để thêm hỗ trợ cho 'hierarchyid'.
Trong khi quá trình truy xuất từ DB hoạt động tốt với kiểu 'hierarchyid', thì vấn đề của tôi là với các thủ tục được lưu trữ cần một tham số 'hierarchyid'.
Các thủ tục lưu trữ trông như thế này:
CREATE PROCEDURE [dbo].[GetSomethingByNodeId]
(
@startingRoot HIERARCHYID
,@return HIERARCHYID OUTPUT
)
Mã của tôi khách hàng để gọi stored procedure này trông như thế này:
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();
Nhưng tiếc là kêu gọi truy vấn này ném một ngoại lệ mà nói:
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.
Bất kỳ ý tưởng nào về cách tôi có thể thực hiện công việc này?
Bắn trong bóng tối ở đây ... Bạn có thể thay đổi Sproc để ngoại trừ một Nvarchar và sau đó đúc giá trị cho một hirachyId nội bộ trong Sproc? – SimonGates