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/

posted @ 2015-02-07 13:21  wolfy  阅读(5888)  评论(4编辑  收藏  举报