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/

博客地址: http://www.cnblogs.com/wolf-sun/
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。http://www.cnblogs.com/wolf-sun/p/4278503.html

相关文章
|
2月前
|
SQL 开发框架 .NET
C# Linq SaveChanges()报错 You have an error in your SQL syntex
C# Linq SaveChanges()报错 You have an error in your SQL syntex
10 0
|
7月前
|
SQL 开发框架 .NET
SQL中in和not in在LINQ中的写法
SQL中in和not in在LINQ中的写法
|
8月前
|
SQL 开发框架 .NET
ef linq方式插入+sql操作数据注意事项
ef linq方式插入+sql操作数据注意事项
65 0
|
SQL 存储 开发框架
Linq To SQl总结
Linq To SQl总结
150 0
Linq To SQl总结
|
SQL 开发框架 安全
Linq to SQL中的ColumnAttribute中的Expression
在Linq to SQL中,使用ColumnAttribute特性来关联数据库和实体类。这个Atrribute也有很多属性可以设置。其中让人比较迷糊的是Expression,也折磨了我好几天才弄明白(因为官方的例子给的也让人迷糊,基本运行都无法通过)。
489 0
Linq to SQL中的ColumnAttribute中的Expression
|
SQL .NET 开发框架
Linq SQL 动态个数where查询
Linq SQL 动态个数where查询,从parts表中查找工件类型ID为1、2或6...(个数不定)的所有part。
8406 0