这里介绍当Linq SubmitChanges方法时,LINQ to SQL会检查已知对象的集合以确定新实例是否已附加到它们。如果已附加,这些新实例将添加到被跟踪对象的集合。

Linq SubmitChanges办法核算要刺进、更新或删去的已修正目标的集,并履行相应指令以完成对数据库的更改。

Linq调用SubmitChanges办法  Linq SubmitChanges 第1张

不管目标做了多少项更改,都只是在更改内存中的副本。并未对数据库中的实践数据做任何更改。直到对DataContext显式Linq SubmitChanges,所做的更改才会传输到服务器。调用时,DataContext会设法将咱们所做的更改转换为等效的SQL指令。咱们也能够运用自己的自定义逻辑来重写这些操作,但提交次序是由DataContext的一项称作“更改处理器”的服务来和谐的。事情的次序如下:
1. 当Linq SubmitChanges办法时,LINQ to SQL会查看已知目标的调集以确认新实例是否已附加到它们。假如已附加,这些新实例将添加到被盯梢目标的调集。
2. 一切具有挂起更改的目标将依照它们之间的依靠联系排序成一个目标序列。假如一个目标的更改依靠于其他目标,则这个目标将排在其依靠项之后。
3. 在行将传输任何实践更改时,LINQ to SQL会发动一个业务来封装由各条指令组成的系列。
4. 对目标的更改会逐一转换为SQL指令,然后发送到服务器。

假如数据库检测到任何过错,都会形成提交进程中止并引发反常。将回滚对数据库的一切更改,就像未进行过提交相同。DataContext 仍具有一切更改的完好记载。

下面代码阐明的是在数据库中查询CustomerID为ALFKI的顾客,然后修正其公司名称,***次更新并Linq SubmitChanges办法,第2次更新了数据但并未Linq调用SubmitChanges办法。

  1. //查询
  2. Customercust=db.Customers.First(c=>c.CustomerID=="ALFKI");
  3. //更新数据并调用SubmitChanges()办法
  4. cust.CompanyName="YJingLee'sBlog";
  5. db.SubmitChanges();
  6. //更新数据没有调用SubmitChanges()办法
  7. cust.CompanyName="http://lyj.cnblogs.com";

动态查询

运用动态查询,这个比如用CreateQuery()办法创立一个IQueryable类型表达式输出查询的句子。这儿给个比如阐明一下。有关动态查询具体内容,下一篇介绍。

  1. varc1=Expression.Parameter(typeof(Customer),"c");
  2. PropertyInfoCity=typeof(Customer).GetProperty("City");
  3. varpred=Expression.Lambda<Func<Customer,bool>>(
  4. Expression.Equal(
  5. Expression.Property(c1,City),
  6. Expression.Constant("Seattle")
  7. }
  8. };
  9. IQueryablecusts=db.Customers;
  10. Expressionexpr=Expression.Call(typeof(Queryable),"Where",
  11. newType[]{custs.ElementType},custs.Expression,pred);
  12. IQueryable<Customer>q=db.Customers.AsQueryable().
  13. Provider.CreateQuery<Customer>(expr);

Log特点用于将SQL查询或指令打印到TextReader。此办法对了解 LINQ to SQL 功用和调试特定的问题或许很有用。

下面的示例运用Log特点在SQL代码履行前在控制台窗口中显现此代码。咱们能够将此特点与查询、刺进、更新和删去指令一同运用。

  1. //封闭日志功用
  2. //db.Log=null;
  3. //运用日志功用:日志输出到控制台窗口
  4. db.Log=Console.Out;
  5. varq=fromcindb.Customers
  6. wherec.City=="London"
  7. selectc;
  8. //日志输出到文件
  9. StreamWritersw=newStreamWriter(Server.MapPath("log.txt"),true);
  10. db.Log=sw;
  11. varq=fromcindb.Customers
  12. wherec.City=="London"
  13. selectc;
  14. sw.Close();

【修改引荐】

  1. Linq成果集形状概述
  2. Linq存储进程回来详解
  3. Linq调用LoadProducts办法
  4. Linq运用数据表简略描绘
  5. Linq目标引证简略介绍
转载请说明出处
知优网 » Linq调用SubmitChanges办法

发表评论

您需要后才能发表评论