使用LINQ to SQL更新数据库(下):性能测试

在上一篇随笔中,我们列举了使用LINQ to SQL对数据库进行更新的5中方案。本文将对这几种方案进 行测试和对比,力求找出一个最佳实践。

准备工作

我们的测试还是基于Products表。为了使测试更符合实际,我们将与之关联的Categories、Suplliers 和Order_Details表都添加进来。首先创建一个IProductRepository接口,定义插入、查找、更新操作:

public interface IProductRepository
{
   void InsertProduct(Product product);

   Product GetProduct(int id);

   void UpdateProduct(Product product);
}

然后创建一个AbstractProductRepository抽象类,实现IProductRepository接口。由于插入操作都是 一样的,我们在抽象基类中提供了默认实现。同时还提供可选的查询操作,因为除了“禁用查询跟踪”方 案外,其余的查询操作也是一样的。

public abstract class AbstractProductRepository : IProductRepository
{
   public void InsertProduct(Product product)
   {
     NorthwindDataContext db = new NorthwindDataContext();
     db.Products.InsertOnSubmit(product);
     db.SubmitChanges();
   }

   public virtual Product GetProduct(int id)
   {
     NorthwindDataContext db = new NorthwindDataContext();
     return db.Products.SingleOrDefault(p => p.ProductID == id);
   }

   public abstract void UpdateProduct(Product product);
}

接下来创建各个方案的实现类(具体的代码请参考文章最后的下载链接):

方案一 重新赋值:CopyPropertiesProductRepository

方案二 禁用对象跟踪:EnableObjectTrackingProductRepository

方案三 移除关联:DetachAssociationProductRepository

方案四 使用委托:UsingDelegateProductRepository

时间: 2025-01-05 19:33:40

使用LINQ to SQL更新数据库(下):性能测试的相关文章

艾伟_转载:使用LINQ to SQL更新数据库(上):问题重重

在学习LINQ时,我几乎被一个困难所击倒,这就是你从标题中看到的更新数据库的操作.下面我就一步步带你走入这泥潭,请准备好砖头和口水,Follow me. 从最简单的情况入手 我们以Northwind数据库为例,当需要修改一个产品的ProductName时,可以在客户端直接写下这样的代码: // List 0NorthwindDataContext db = new NorthwindDataContext(); Product product = db.Products.Single(p =>

一起谈.NET技术,使用LINQ to SQL更新数据库(上):问题重重

在学习LINQ时,我几乎被一个困难所击倒,这就是你从标题中看到的更新数据库的操作.下面我就一步步带你走入这泥潭,请准备好砖头和口水,Follow me. 从最简单的情况入手 我们以Northwind数据库为例,当需要修改一个产品的ProductName时,可以在客户端直接写下这样的代码: // List 0NorthwindDataContext db = new NorthwindDataContext(); Product product = db.Products.Single(p =>

艾伟_转载:使用LINQ to SQL更新数据库(中):几种解决方案

在前一篇文章中,我提出了在使用LINQ to SQL进行更新操作时可能会遇到的几种问题.其实这并不是我一个人遇到的问题,当我在互联网上寻找答案时,我发现很多人都对这个话题发表过类似文章.但另我无法满足的是,他们尽管提出了问题,却没有进行详细的剖析,只给出了解决方案(如添加RowVersion列.去除关联等),但却没有说明为什么必须这么做.这也是我写上篇的初衷,希望通过对LINQ to SQL源代码的分析,来一步一步找出解决问题的办法.本文将对这些方法一一进行讨论. 方案一:重新赋值 在Terry

一起谈.NET技术,使用LINQ to SQL更新数据库(中):几种解决方案

在前一篇文章中,我提出了在使用LINQ to SQL进行更新操作时可能会遇到的几种问题.其实这并不是我一个人遇到的问题,当我在互联网上寻找答案时,我发现很多人都对这个话题发表过类似文章.但另我无法满足的是,他们尽管提出了问题,却没有进行详细的剖析,只给出了解决方案(如添加RowVersion列.去除关联等),但却没有说明为什么必须这么做.这也是我写上篇的初衷,希望通过对LINQ to SQL源代码的分析,来一步一步找出解决问题的办法.本文将对这些方法一一进行讨论. 方案一:重新赋值 在Terry

使用LINQ to SQL更新数据库(中):几种解决方案

在前一篇文章中,我提出了在使用LINQ to SQL进行更新操作时可能会遇到的几种问题.其实这并不是 我一个人遇到的问题,当我在互联网上寻找答案时,我发现很多人都对这个话题发表过类似文章.但另我 无法满足的是,他们尽管提出了问题,却没有进行详细的剖析,只给出了解决方案(如添加RowVersion列 .去除关联等),但却没有说明为什么必须这么做.这也是我写上篇的初衷,希望通过对LINQ to SQL源 代码的分析,来一步一步找出解决问题的办法.本文将对这些方法一一进行讨论. 方案一:重新赋值 在T

使用LINQ to SQL更新数据库(上):问题重重

在学习LINQ时,我几乎被一个困难所击倒,这就是你从标题中看到的更新数据库的操作.下面我就一 步步带你走入这泥潭,请准备好砖头和口水,Follow me. 从最简单的情况入手 我们以Northwind数据库为例,当需要修改一个产品的ProductName时,可以在客户端直接写下这样的 代码: // List 0 NorthwindDataContext db = new NorthwindDataContext(); Product product = db.Products.Single(p

使用linq to sql 把数据库绑定到listview中

问题描述 使用linq to sql 把数据库绑定到listview中 请问怎么使用linq to sql 把数据库绑定到listview中,谢谢 解决方案 使用LINQ to SQL更新数据库ASP.NET MVC 学习 --- 第五课(使用Linq to SQL数据库)LINQ To SQL 中 聚合函数的使用问题 解决方案二: var query = from x in db.Table where 条件 select x; foreach (var item in query) { Li

LINQ to SQL集成数据库语言的的优点与劣势

1.LINQ to SQL的优点 在LINQ to SQL推出之前,我们只是把SQL语句形成一个string,然后,通过ado.net传给SQLserver,返回结果集.这里的缺陷就是,如果你SQL语句写的有问题,只有到运行时才知道.而且并不所有的人都懂数据库的.LINQ to SQL在一切围绕数据的项目内都可以使用.特别是在项目中缺少SQL Server方面的专家时,LINQ to SQL的强大的功能可以帮我们快速的完成项目.LINQ to SQL的推出,是让大家从烦琐的技术细节中解脱出来,更

使用Linq to Sql 创建数据库和表

1.建一个类Article View Code 1 using System.Data.Linq.Mapping; 2 3 4 5 [Table(Name = "Article")] 6 public class Article 7 { 8 [Column(IsPrimaryKey=true)] 9 public int id10 {11 get;12 set;13 }14 [Column(Name = "containt")]15 public string co