博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linq之Linq to Sql
阅读量:6807 次
发布时间:2019-06-26

本文共 4487 字,大约阅读时间需要 14 分钟。

目录

写在前面

上篇文章介绍了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 
2
3
4
5
6
9
10
11
12
13

查看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
customers = new List
() { 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
(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_Customer3                         where c.ID >= 24                         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] = @p3WHERE ([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_Order4                         join c in context.TB_Customer5                         on o.ID equals c.ID6                         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://nztwl.baihongyu.com/

你可能感兴趣的文章
eclipse使用hadoop插件出现java.lang.OutOfMemoryError: Java heap space
查看>>
Unicode Tips
查看>>
jvm学习--类加载器
查看>>
enlightenment提权的工具
查看>>
指针的意义和linux的内存回收艺术
查看>>
操作系统就是虚拟机--主内又主外
查看>>
Centos网络管理(五)-Bonding、网络组和网桥
查看>>
PyCharm----中文显示乱码的解决方法总结
查看>>
crontab使用环境变量
查看>>
“独立博客”为什么独立?
查看>>
Uber花了21亿元入驻上海自贸区 不叫优步叫雾博
查看>>
Java内存模型
查看>>
AppLinks使用详解
查看>>
JavaScript正则表达式19例(11)
查看>>
UNIX发展历史流程图
查看>>
负载均衡之LVS详解
查看>>
WP7实例篇之土豆搜索器(2)
查看>>
图解Cisco Packet Tracert之利用TFTP来升级路由器的IOS
查看>>
使用SDM配置基于IPsec 加密的GRE隧道
查看>>
Windows远程桌面及其相关问题
查看>>