Linq之Linq to Sql


目錄

寫在前面

系列文章

Linq to sql

總結

寫在前面

上篇文章介紹了linq to xml的相關內容,linq to xml提供一種更便捷的創建xml樹,及查詢的途徑。這篇文章將繼續介紹linq to sql的內容。個人覺得linq to sql在實際開發中在中小型項目中用的比較多,在中小型項目用ef或者nhibernate這些orm確實有點重量級。Linq to Sql提供了豐富的功能,完全可以滿足日常數據訪問的需求。使用方法也非常簡單、靈活。

系列文章

Linq之Lambda表達式初步認識

Linq之Lambda進階

Linq之隱式類型、自動屬性、初始化器、匿名類

Linq之擴展方法

Linq之Expression初見

Linq之Expression進階

Linq之Expression高級篇(常用表達式類型)

Linq之常見關鍵字

Linq之延遲加載特性

Linq之Linq to Objects

Linq之Linq to XML

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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM