日期:2014-05-20  浏览次数:20821 次

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

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

SQL code
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 去调用预存程序的代码:

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


目前不晓得如何处理这块




------解决方案--------------------
查询出XML数据后,用XDocument xml=XDoucment.Parse(yourxml);转化一下
然后就可以使用LINQ2XML进行相关查询了:
var query= from x in xml.Descendants("NodeName")
select x;