目錄
寫在前面
上篇文章介紹了linq to xml的相關內容,linq to xml提供一種更便捷的創建xml樹,及查詢的途徑。這篇文章將繼續介紹linq to sql的內容。個人覺得linq to sql在實際開發中在中小型項目中用的比較多,在中小型項目用ef或者nhibernate這些orm確實有點重量級。Linq to Sql提供了豐富的功能,完全可以滿足日常數據訪問的需求。使用方法也非常簡單、靈活。
系列文章
Linq to sql
LINQ to SQL 是 .NET Framework 3.5 版的一個組件,提供用於將關系數據作為對象管理的運行時基礎結構。
在 LINQ to SQL 中,關系數據庫的數據模型映射到用開發人員所用的編程語言表示的對象模型。 當應用程序運行時,LINQ to SQL 會將對象模型中的語言集成查詢轉換為 SQL,然后將它們發送到數據庫進行執行。當數據庫返回結果時,LINQ to SQL 會將它們轉換回您可以用您自己的編程語言處理的對象。
具體怎么使用,還是看一個例子吧。
准備一個測試數據庫
添加linq to sql類
創建好后,在會在窗口中默認打開Linq2Sql.dbml,然后選擇服務器資源管理器,添加映射關系
添加連接
將表拖入Linq2Sql.dbml窗口
到此,數據庫映射關系已經完成,然后你在解決方案資源管理器中會看到如下的文件
settings.settings中是數據庫連接字符串的可視化管理,你可以在這里面進行連接字符串的修改,添加操作。
App.config中是生成的連接字符串
1 <?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3 <configSections> 4 </configSections> 5 <connectionStrings> 6 <add name="Wolfy.Linq2Sql.Properties.Settings.TestConnectionString" 7 connectionString="Data Source=.;Initial Catalog=Test;User ID=sa;Password=sa" 8 providerName="System.Data.SqlClient" /> 9 </connectionStrings> 10 <startup> 11 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 12 </startup> 13 </configuration>
查看Linq2Sql.designer.cs,其中DataContext類為linq to sql的主入口點,也就是咱們經常說的數據庫上下文。
好了,到此與數據庫的映射關系已經完成,下面看看linq to sql的相關操作。
增
1 static void Main(string[] args) 2 { 3 //創建數據庫上下文對象 4 Linq2SqlDataContext context = new Linq2SqlDataContext(); 5 TB_Customer customer = new TB_Customer() { ID = 1, Name = "wolfy", Address = "北京海淀" }; 6 //插入 7 context.TB_Customer.InsertOnSubmit(customer); 8 List<TB_Customer> customers = new List<TB_Customer>() { 9 new TB_Customer(){ ID=2, Name="zhangsan", Address="上海"}, 10 new TB_Customer(){ID=3, Name="lisi",Address="河南"} 11 }; 12 //批量插入 13 context.TB_Customer.InsertAllOnSubmit<TB_Customer>(customers); 14 //提交數據庫 15 context.SubmitChanges(); 16 17 }
生成的sql語句
exec sp_executesql N'INSERT INTO [dbo].[TB_Customer]([Name], [Address]) VALUES (@p0, @p1) SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]',N'@p0 nvarchar(4000),@p1 nvarchar(4000)',@p0=N'wolfy',@p1=N'北京海淀' exec sp_executesql N'INSERT INTO [dbo].[TB_Customer]([Name], [Address]) VALUES (@p0, @p1) SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]',N'@p0 nvarchar(4000),@p1 nvarchar(4000)',@p0=N'zhangsan',@p1=N'上海' exec sp_executesql N'INSERT INTO [dbo].[TB_Customer]([Name], [Address]) VALUES (@p0, @p1) SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]',N'@p0 nvarchar(4000),@p1 nvarchar(4000)',@p0=N'lisi',@p1=N'河南'
刪
批量刪除id>=2的客戶信息
1 Linq2SqlDataContext context = new Linq2SqlDataContext(); 2 var query = from c in context.TB_Customer 3 where c.ID >= 2 4 select c; 5 //批量刪除 6 context.TB_Customer.DeleteAllOnSubmit(query); 7 //提交數據庫 8 context.SubmitChanges();
生成的sql語句
exec sp_executesql N'DELETE FROM [dbo].[TB_Customer] WHERE ([ID] = @p0) AND ([Name] = @p1) AND ([Address] = @p2)',N'@p0 int,@p1 nvarchar(4000),@p2 nvarchar(4000)',@p0=2,@p1=N'zhangsan',@p2=N'上海' exec sp_executesql N'DELETE FROM [dbo].[TB_Customer] WHERE ([ID] = @p0) AND ([Name] = @p1) AND ([Address] = @p2)',N'@p0 int,@p1 nvarchar(4000),@p2 nvarchar(4000)',@p0=3,@p1=N'lisi',@p2=N'河南'
改
修改id為1的客戶的姓名
1 Linq2SqlDataContext context = new Linq2SqlDataContext(); 2 TB_Customer customer = context.TB_Customer.SingleOrDefault(c => c.ID == 1); 3 customer.Name = "zhangsan"; 4 //提交數據庫 5 context.SubmitChanges();
sql語句
exec sp_executesql N'UPDATE [dbo].[TB_Customer] SET [Name] = @p3 WHERE ([ID] = @p0) AND ([Name] = @p1) AND ([Address] = @p2)',N'@p0 int,@p1 nvarchar(4000),@p2 nvarchar(4000),@p3 nvarchar(4000)',@p0=1,@p1=N'wolfy',@p2=N'北京海淀',@p3=N'zhangsan'
查
查出id為1的客戶下的所有的訂單信息。
1 Linq2SqlDataContext context = new Linq2SqlDataContext(); 2 //customer和order表關聯查詢 3 var query = from o in context.TB_Order 4 join c in context.TB_Customer 5 on o.ID equals c.ID 6 select new { CustomerID = c.ID, OrderID = o.ID, OrderDate = o.OrderDate }; 7 //提交數據庫 8 context.SubmitChanges();
sql語句
SELECT [t1].[ID] AS [CustomerID], [t0].[ID] AS [OrderID], [t0].[OrderDate] FROM [dbo].[TB_Order] AS [t0] INNER JOIN [dbo].[TB_Customer] AS [t1] ON [t0].[ID] = [t1].[ID] SELECT [t1].[ID] AS [CustomerID], [t0].[ID] AS [OrderID], [t0].[OrderDate] FROM [dbo].[TB_Order] AS [t0] INNER JOIN [dbo].[TB_Customer] AS [t1] ON [t0].[ID] = [t1].[ID]
總結
本篇介紹了linq to sql的相關內容,舉了一個使用linq to sql操作數據庫的例子,希望能幫你對linq to sql快速上手提供幫助。
參考文章
http://kb.cnblogs.com/page/70851/