2009-04-14 63 views
0

我目前正在使用Visual Studio 2008 Express处理小型Web应用程序。我试图使用客户端库从服务器检索XML文档,然后将文档保存到数据库列(使用Linq)。数据库列的数据类型为xml。不幸的是,在我的第一次尝试中,我一直没有成功。无法在数据类型为'xml'的表列中存储XmlDocument

假设我已经到了数据上下文对象的引用,这里是它是什么,我试图做的基本知识:

// using a client library, requestthe XML document from the server 
XmlDocument oXmlDoc = oClient.GetDataAsXML(); 

InformationLog oLog = new InformationLog(); 
oLog.InfoXML = oXmlDoc.InnerXml; // this is where the problem occurs 

dbContext.InformationLogs.InsertOnSubmit(oLog); 
dbContext.SubmitChanges(); 

具体来说,我得到的错误是:

Cannot implicitly convert type 'System.Xml.XmlNode' to 'System.Xml.Linq.XElement' 

我是ASP.NET MVC和Linq的新手,所以我知道我错过了一些东西。除了答案之外,我也很好奇为什么没有任何额外的处理就不可能简单地保存XML。

+0

你看到了什么问题?您是否尝试过查看InnerXml以确保它是一个有效的文档,并且此文本可以存储在SQL中?我会使用Outerxml而不是InnerXml。 – 2009-04-15 01:22:47

回答

2

您应该看看使用XDocument而不是XmlDocument,然后尝试将XDocument直接分配给oLog.InfoXML属性。

不知道oClient.GetDataAsXML()如何工作,您是否可以轻松地从该调用中创建XDocument,但如果您使用XDocument而不是XmlDocument工作,则您的生活会更轻松。

+0

非常感谢 - 这最终使我走上了正轨。客户端返回一个XmlDocument,所以我在返回的XmlDocument的OuterXml字符串上使用了XDocument.Parse()。 – Tom 2009-04-15 01:31:08

1

Here's a great post on that。基本上你有新的XML类型和旧的XML类型在那里发生冲突。

+0

@JP - 感谢您的链接。很高兴有此作为参考,因为它有助于解释我遇到的冲突。 – Tom 2009-04-15 01:31:48

0

您也可以从.NET 3.5切换你的项目到3.0,这将默认你回到system.xml。但那会让你远离使用LINQ。

+0

不会使用旧版本的.net导致其他问题?这是处理这个问题的常用方法吗? – 2012-12-03 16:19:37