在 .NET 3.5 中使用 LINQ to XML 和 LINQ to SQL 提取 XML 并插入批量数据






3.56/5 (5投票s)
在 .NET 3.5 中使用 LINQ to XML 和 LINQ to SQL 提取 XML 并进行 SQL 批量更新。
引言
本文重点介绍如何读取 XML 内容,并使用 LINQ to XML、LINQ to SQL 和 LINQ 对数据库执行批量插入,并讨论 LINQ 的重要性。
背景
商业应用程序通常需要来自各种来源的批量数据。这些数据通常以 XML 格式提供,并且需要将数据更新到应用程序的数据库中。通常,这些操作都是批量完成的。此外,在执行任何批量操作之前,需要读取 XML 内容并将其转换为与应用程序的关系结构对齐的格式。在这里,我们将研究一种使用 LINQ 实现此目的的方法。
当然,我不打算在这里处理数千条记录,因为使用 LINQ to SQL 进行批量更新会花费大量时间,因为它需要进行内部验证和事务处理。因此,此解决方案将有其自身的局限性。
为了描述一个类似的场景,让我们从 RSS 源中读取 XML 内容,并将该内容插入到具有以下字段的表中:PostID
、Title
和 Date
。由于这是为了演示,所以让我们坚持这种简单的结构。 为了清晰起见,我将在此处使用控制台应用程序。
演示
在整个演示中,将使用 Visual Studio 2008 和 SQL Server 2005。 首先,让我们将 LINQ to SQL 数据上下文添加到我们的应用程序中。 这将连接到数据库,并将包含我们将要使用的数据模型。 要创建数据模型,请连接到您的数据库,并将所需的表拖到数据模型中。 看起来像这样
至于 XML 的来源,让我使用这个博客的 RSS 源。 这是网址:http://weblogs.asp.net/scottgu/rss.aspx。
现在,让我们编写一些代码,该代码将读取 RSS 源并将内容写入数据库中名为RssFeed的表,这是代码
class Program
{
static void Main(string[] args)
{
WriteRssToDb();
Console.ReadLine();
}
private static void WriteRssToDb()
{
XDocument feed = XDocument.Load("http://weblogs.asp.net/scottgu/rss.aspx");
SampleGayaniDataContext dbContext = new SampleGayaniDataContext();
var feedpost = from post in feed.Descendants("item")
select new RssFeed
{
Tile = post.Element("title").Value,
Date = DateTime.Parse(post.Element("pubDate").Value)
};
dbContext.RssFeeds.InsertAllOnSubmit(feedpost);
dbContext.SubmitChanges();
Console.WriteLine("Successfully inserted, Check your database.");
}
}
XDocument.Load
方法将指定 URL 中的 XML 内容加载到类型为 XDocument
的变量中,该变量将 XML 文档保存在内存中。接下来,对数据上下文(类型为 SampleGayaniDataContext
的数据库上下文)进行引用。 在 LINQ 查询中,feed.Descendants("item")
方法访问 XML 文档中的项目集合。 通过使用 select new RssFeed
,它创建 RssFeed
类的新实例,并将帖子实例的值分配给 RssFeed
的新实例的属性。现在,提取的 XML 内容被馈送到 RssFeed
对象集合中,并通过隐式类型变量 feedpost
,它保存 RssFeed
对象的集合。
InsertAllOnSubmit
方法接受 RssFeed
对象的集合,它将新记录插入到数据上下文中。 SubmitChanges
方法会将对数据上下文所做的更改提交到数据库。
运行应用程序会导致此通知,因此让我们检查数据库中插入的记录。
这是插入的记录
摘要
如上所示,.NET Framework 3.5 的新 LINQ、LINQ to SQL 和 LINQ to XML 在操作数据源方面是非常强大的技术。 在上述上下文中,LINQ to SQL 提供了一个在 SQL Server 数据库上执行关系操作的基础。 它足够丰富,具有所有必要的操作,例如插入、更新、删除。 此外,它验证类型,自动处理事务,并提供一种在发生并发冲突时进行通知的机制。
查看 LINQ to XML,它提供了查询和操作 XML 内容的方法和途径。 几乎所有属于 LINQ to XML 的类都可以在 System.Xml.Linq
中找到。
LINQ 是 .NET 3.5 中最强大的根机制,它允许您从多个数据源进行查询。 在此示例中,我使用了一个 XML 源以及一个关系数据源在一个查询中提取所需格式的数据。
如前所述,此解决方案显然会对批量操作支持的记录数有所限制,而不会降低应用程序性能。 但是,由于其内部验证和事务支持,我们可以确保操作的准确性。 总体而言,LINQ 在带来有效的类型安全查询和干净的代码方面非常令人印象深刻。 多亏了 LINQ,这个方便的解决方案才成为可能,并且在 .NET Framework 3.5 中,这真是太好了,难以置信。