Linq学习笔记(2.3)——DLinq高级操作

     前面我们学习了使用Dlinq,从面向对象的角度操作数据库的基本一些知识,今天我学习了Dlinq直接执行SQL命令可查询,执行存储过程,事务处理的一些知识,下面是我联系时的一些Demo。
     在这次学习前先向大家将两个Dlinq的知识:
     1:使用工具生成实体。
     前面学习的时候大家可能感觉最麻烦的是根据数据库写映射实体,vs专门提供了工具(C:\Program Files\Microsoft Visual Studio 9.0\SDK\v3.5\Bin\SqlMetal.exe)方便我们自动生成实体,
     SqlMetal /server:.\SQLExpress /database:Northwind /pluralize /namespace:Arcadia /code:d:\Northwind.cs
  大家可以在d:目录下找到 Northwind.cs,将其拷贝到您的工程下,下面我们的代码就是在此文件下操作。

     2:显示Linq语句编译后的Sql语句
     方法1:用DataContext的Log属性。db.Log = Response.Output;
     方法2:用GetQueryText / GetChangeText。GetQueryText用于查询时使用,GetChangeText用于更新或删除。
var products  =  db.Products.Where(p  =>  p.OrderDetails.Count  >   50 );
Response.Write(db.GetQueryText(products));


ExecuteQuery
    Northwind db  =   new  Northwind( " data source=.\\SQLEXPRESS;Integrated Security=SSPI;");
    var products 
=  db.ExecuteQuery < Product > ( " select * from Products where ProductID<10 " );
    products.ToList().ForEach(p 
=>  Response.Write(p.ProductName  +   " <br> " ));
Linq学习笔记(2.3)——DLinq高级操作_第1张图片

ExecuteCommand
   Northwind db  =   new  Northwind( " data source=.\\SQLEXPRESS;Integrated Security=SSPI; " );
    db.ExecuteCommand(
" update [Products] set [ProductName] = {0} where [ProductID]={1} " " Young's book " 1 );

ExecuteCommand用户更新,删除等操作, ExecuteQuery用于查询操作,所以在执行存储过程时要根据情况使用不同的语句。
        Northwind db  =   new  Northwind( " data source=.\\SQLEXPRESS;Integrated Security=SSPI; " );
        var orders 
=  db.ExecuteQuery < Order > ( " exec CustOrdersOrders @CustomerID={0} " " ALFKI " );
        orders.ToList().ForEach(o 
=>  Response.Write(o.OrderID  +   " <br> " ));
Linq学习笔记(2.3)——DLinq高级操作_第2张图片

Transactions
Northwind db  =   new  Northwind( " data source=.\\SQLEXPRESS;Integrated Security=SSPI; " );

        
if  (db.Connection  !=   null ) db.Connection.Open();
        db.Transaction 
=  db.Connection.BeginTransaction();
        IEnumerator
< OrderDetail >  orders  =  db.OrderDetails.Where(o  =>  o.ProductID  ==   1 ).GetEnumerator();        
        
while  (orders.MoveNext())
        
{
            OrderDetail od 
= orders.Current;
            od.UnitPrice 
= 200;
        }


        var prod 
=  db.Products.Single(p  =>  p.ProductID  ==   1 );
        db.Products.Remove(prod);
        
try {
            db.SubmitChanges();
            db.Transaction.Commit();
        }

        
catch {
            db.Transaction.Rollback();
            
throw;
        }

        
finally {
            db.Transaction 
= null;
        }
    官方的文档介绍Dinq的Transaction这样使用的,不过我有一点不明白,即使不使用Transaction,我测试SubmitChanges()本身就有类似Transaction的功能,如果一系列操作中有一个操作失败,这一系列操作都不会成功,请高手分析一下使用Transaction和直接SubmitChanges()的区别。
     上面这些是用来弥补Dlinq不好用对象处理的复杂数据库操作情景,上面的例子很简单,为了方便理解其使用方法。

你可能感兴趣的:(LINQ)