首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >返回XML的Linq存储过程

返回XML的Linq存储过程
EN

Stack Overflow用户
提问于 2016-12-22 06:34:26
回答 3查看 3K关注 0票数 6

我正在使用实体框架代码-第一种方法。我想从DbContext类调用一个存储过程,并获得XML。

存储过程( Server):

代码语言:javascript
复制
CREATE PROCEDURE xml_test    
AS
BEGIN
    DECLARE @xml1 xml

    SET @xml1 = (SELECT * from Product FOR XML RAW) 

    SELECT @xml1 AS my_xml
END

LINQ实体框架:

代码语言:javascript
复制
using (DBContext db = new DBContext())
{
    var ProductList = await db.Database.ExecuteSqlCommandAsync("exec xml_test");
}

在这里,ProductList列表返回-1。

我希望获得由存储过程返回的xml输出。

注意:我也尝试过这样的方法:ExecuteSqlCommand,SqlQuery,但没有帮助。

EN

回答 3

Stack Overflow用户

发布于 2016-12-26 12:08:50

我认为你可以像这样使用SQLQuery

代码语言:javascript
复制
using (var dbcontext = new DBContext())
{
    //Reading stored procedure results as List<string>
    var r = dbcontext.Database.SqlQuery<string>("EXEC xml_test").ToList(); //Note: EXEC is optional

    //Joining strings to one string that causes in resulting long strings
    var xmlString = string.Join("", r);

    //Now you can load your string to a XmlDocument
    var xml = new XmlDocument();

    //Note: You need to add a root element to your result
    xml.LoadXml($"<root>{xmlString}</root>");
}

注意:要从存储过程中获取记录,需要在SET NOCOUNT ON;之后添加BEGIN ;)。

代码语言:javascript
复制
CREATE PROCEDURE [dbo].[xml_test] 
AS
BEGIN
    SET NOCOUNT ON;

    SELECT * from dbo.AspNetUsers FOR XML RAW;
END
票数 4
EN

Stack Overflow用户

发布于 2016-12-29 08:16:35

正如shA.t所提到的,可以使用"对于XML“。但是,在使用时要注意的一件事是截断字符串/XML(函数调用后通过EF返回),在大约2k个字符处,要处理这个场景,您可以查看。此外,如果代码设计允许,您甚至可以使用带有Enitity框架的Ouptput参数

票数 3
EN

Stack Overflow用户

发布于 2016-12-22 07:38:30

Database.ExecuteSqlCommand执行用于CRUD操作的命令,而不是查询。

使用Database.SqlQuery进行查询。它将返回给定类型的元素,但xml不是原始类型,这可能是LINQ无法工作的原因之一。在存储过程中尝试cast xml到nvarchar(max),这将是字符串类型。

。因此,您的存储过程应该如下所示:

代码语言:javascript
复制
    CREATE PROCEDURE xml_test    
AS
BEGIN
    DECLARE @xml1 xml

    SET @xml1 = (SELECT * from Product FOR XML RAW) 

    SELECT CAST(@xml1 as nvarchar(max))
END
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41277079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档