我使用的是Entity Framework代码优先的方法。我想从DbContext
类调用一个存储过程并获取XML输出。
存储过程(SQL Server):
CREATE PROCEDURE xml_test
AS
BEGIN
DECLARE @xml1 xml
SET @xml1 = (SELECT * from Product FOR XML RAW)
SELECT @xml1 AS my_xml
END
LINQ实体框架:
using (DBContext db = new DBContext())
{
var ProductList = await db.Database.ExecuteSqlCommandAsync("exec xml_test");
}
这里ProductList
列表返回-1。
我想获取存储过程返回的xml输出。
注意:我也尝试过这样的方法:ExecuteSqlCommand、SqlQuery无需帮助。
3条答案
按热度按时间3pvhb19x1#
我想你可以这样使用
SQLQuery
:注意:要从存储过程中获取记录,需要在
BEGIN
之后添加SET NOCOUNT ON;
;).cx6n0qe32#
如shA.t所述,可以使用“FOR XML”。然而,在使用时需要注意的一件事是字符串/XML(通过EF函数调用后返回)的截断,大约2k个字符,为了处理这种情况,您可以查看this。如果代码设计允许,你甚至可以使用Ouptput parameters with Enitity Framework。
rbpvctlc3#
Database.ExecuteSqlCommand
执行用于CRUD操作的命令,而不是查询。使用
Database.SqlQuery
是为了查询。它将返回给定类型的元素,但xml
不是原始类型,这可能是LINQ不工作的原因。在存储过程中尝试cast
xml到nvarchar(max)
,这将是字符串类型。因此,您的存储过程应该如下所示: