LinqDataContext浅谈

本文向大家介绍Linq DataContext,可能好多人还不了解Linq DataContext,没有关系,看完本文你肯定有不少收获,希望本文能教会你更多东西。

为林口等地区用户提供了全套网页设计制作服务,及林口网站建设行业解决方案。主营业务为网站设计、网站建设、林口网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

主键缓存

Linq to sql对查询过的对象进行缓存,之后的如果只根据主键查询一条记录的话会直接从缓存中读取。比如下面的代码:

 
 
 
  1. Customer c1 = ctx.Customers.Single(customer => customer.CustomerID == "ANATR");
  2. c1.ContactName = "zhuye";
  3. Customer c2 = ctx.Customers.Single(customer => customer.CustomerID == "ANATR");
  4. Response.Write(c2.ContactName);

执行后只会产生一条SQL:

 
 
 
  1. SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName], [t0].
    [ContactTitle], [t0].[Address], [t0].[City], [t0].[Region], [t0].
    [PostalCode], [t0].[Country], [t0].[Phone], [t0].[Fax]
  2. FROM [dbo].[Customers] AS [t0]
  3. WHERE [t0].[CustomerID] = @p0
  4. -- @p0: Input String (Size = 5; Prec = 0; Scale = 0) [ANATR]

由于没有提交修改,所以数据库中的记录还是没有更新。由于这个特性,我们在使用存储过程作为实体更新方法的时候就要当心了,存储过程书写错误,即使你提交了修改也很可能导致缓存中的数据和数据库中的数据不一致,引起不必要的麻烦。

Linq DataContext隔离

有的时候我们会把对象从外部传入Linq DataContext,要求它更新,由于不同的Linq DataContext是相对独立的。由于新的Linq DataContext中还没有获取实体,我们只能通过附加方式更新数据。

首先把Customer表的主键字段加上IsVersion标识:

 
 
 
  1. [Column(Storage="_CustomerID", DbType="NChar(5) NOT NULL", 
    CanBeNull=false, IsPrimaryKey=true, IsVersion = true)]

运行下面的测试代码:

 
 
 
  1. Customer c = new Customer { CustomerID = "ALFKI", 
    ContactName = "zhuye", CompanyName = "1111" };
  2. ctx.Customers.Attach(c, true);
  3. ctx.SubmitChanges();

会捕捉到下面的SQL语句:

 
 
 
  1. UPDATE [dbo].[Customers]
  2. SET [CompanyName] = @p2, [ContactName] = @p3, [ContactTitle] = @p4, 
    [Address] = @p5, [City] = @p6, [Region] = @p7, [PostalCode] = @p8, 
    [Country] = @p9, [Phone] = @p10, [Fax] = @p11
  3. WHERE ([CustomerID] = @p0) AND ([CustomerID] = @p1)
  4. -- @p0: Input StringFixedLength (Size = 5; Prec = 0; Scale = 0) [ALFKI]
  5. -- @p1: Input String (Size = 5; Prec = 0; Scale = 0) [ALFKI]
  6. -- @p2: Input String (Size = 4; Prec = 0; Scale = 0) [1111]
  7. -- @p3: Input String (Size = 5; Prec = 0; Scale = 0) [zhuye]
  8. -- @p4: Input String (Size = 0; Prec = 0; Scale = 0) []
  9. -- @p5: Input String (Size = 0; Prec = 0; Scale = 0) []
  10. -- @p6: Input String (Size = 0; Prec = 0; Scale = 0) []
  11. -- @p7: Input String (Size = 0; Prec = 0; Scale = 0) []
  12. -- @p8: Input String (Size = 0; Prec = 0; Scale = 0) []
  13. -- @p9: Input String (Size = 0; Prec = 0; Scale = 0) []
  14. -- @p10: Input String (Size = 0; Prec = 0; Scale = 0) []
  15. -- @p11: Input String (Size = 0; Prec = 0; Scale = 0) []

分享标题:LinqDataContext浅谈
URL链接:http://www.shufengxianlan.com/qtweb/news20/229420.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联