none
利用entity 技术去调用SQL 中XML的预存程序疑问 RRS feed

  • 问题

  • 小弟的疑问如题
    我目前开发的项目 是直接在SQL中存XML格式的数据
    然后我知道entity的技术 目前似乎还没发展到 可以直接查询xml 的资料格式 参考了相关的文献
    上面是讲说请利用 linq to xml
    但是我之前有做过用entity 去查询预存程序 那我就在想说如果用linq to xml 有没有办法先利用 entity 查询xml的预存程序
    呼叫至前端之后 再用linq to xml去处理传到前端的XML数据   

    以下是我写在SQL中的预存程序

    CREATE PROC aiml查询流程
    (
    @pattern Varchar(255),
    @aiml xml OUTPUT)
    AS 
    BEGIN
        SELECT @aiml=aiml FROM aiml
        WHERE pattern=@pattern  for xml auto
    END
    GO
    
    Declare @pattern Varchar(255),@aiml xml
    Set @pattern ='* ONES'
    EXEC aiml查询流程 @pattern,@aiml OUTPUT
    select @aiml
    SELECT * FROM aiml

    以下是我设计的表格

    我打算透过预存程序查询 pattern 去输出xml格式的 aiml 数据

    测试用entity 在前端去接收输出的XML格式数据 果然跟之前只有纯粹做字符查询的作法不能一样
    它entity 的部分 似乎无法直接接受XML格式的数据  
    参考了下面这篇:
    http://msdn.microsoft.com/zh-tw/library/cc716791.aspx
    文中写到
    Entity Framework 不支持原生 XML 数据型别, 亦即将实体对应至具有 XML 数据行的数据表时,XML 数据行的对等实体属性会是字符串。 您可以中断对象的连接,而且将其串行化为 XML。 如需详细信息,请参阅串行化物件 (Entity Framework)。
    如果应用程序需要有查询 XML 数据的功能,您还是可以使用 LINQ to XML 来善用 LINQ 查询的优势。 如需详细信息,请参阅 LINQ to XML。
    可是看了一下串行化对象 看的头昏眼花 不太懂串行化对象 是什么概念   
    最后要处理SQL 输出到前端的XML数据 还是得靠 LINQ to XML比较方便  
    但前提得有个东西来装这些xml数据 想请教各位大大们 这边该怎么处理才好?

    以下是我目前前端VB.NET 的用entity 去调用预存程序的代码:

    Dim pattern As String = TextBox1.Text '输入参数的值
            Dim Aiml As New ObjectParameter("aiml", GetType(String)) '输出参数
            '执行预存程序
            entities.aiml全文查询(pattern, Aiml)
            '画面输出 Aiml 数据
            Console.Write(Aiml.Value)

    目前不晓得如何处理这块

    2012年4月22日 9:26

答案

全部回复

  • 您好,串行化对象是指将对象串行化为一个XML文件,以这个XML文件来存储该对象,如您有一个类如下

    class Student
    {
        int Id { get; set; }
        string Name { get; set; }
    }

    通过串行化这个类的一个对象,您可以得到一个这样的XML文件

    <Student>
      <Id> 1 </Id>
      <Name> John </Name>
    </Student>
    但我觉得这个应该和您的要求不太相符。文档中提到推荐使用ADO.NET服务来处理,意思是,当您在本地有一个对象,想要存入数据库中的某个xml列,可以先将它串行化为xml再进行存储。当您从数据库中取出XML文件后,在服务中进行反串行化转换为对象传回本地。Entity Framework暂时还不支持xml类型,在之后的版本可能会提供支持,请您耐心等待。

    Allen Li [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月23日 2:16
    版主
  • 您好, 依您的意思是目前 我用EF的预存程序 是无法接收查回的XML数据  并没有一个适当的容器来接收这个数据的意思吗?

    我上面原本的预存程序有写错  这里更改一下


    CREATE PROC aiml查询流程
    (
    @pattern Varchar(255),
    @aiml xml OUTPUT)
    AS 
    BEGIN
        SELECT @aiml=aiml FROM aiml
        WHERE pattern=@pattern  
    END
    GO
    
    Declare @pattern Varchar(255),@aiml xml
    Set @pattern ='* ONES'
    EXEC aiml查询流程 @pattern,@aiml OUTPUT
    select @aiml
    SELECT * FROM aiml
    這裡我利用預存程序查詢  
    @pattern Varchar

    回傳 aiml 這個數據行的XML 數據

    这里的文档是提说

    Entity Framework 不支持原生 XML 数据型别, 亦即将实体对应至具有 XML 数据行的数据表时,XML 数据行的对等实体属性会是字符串。 您可以中断对象的连接,而且将其串行化为 XML 如需详细信息,请参阅串行化物件 (Entity Framework)

     

    那我如何利用EF预存程序去接受串行化的XML数据数据呢?  这里的技术是怎么实现的


    2012年4月23日 5:56
  • 您可以用string类型去接收xml,然后用loadXML方法来将它转换为XML文件。


    Allen Li [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 向恩 2012年4月28日 13:38
    2012年4月24日 2:42
    版主