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

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

目录

写在前面

上篇文章介绍了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/

转载于:https://www.cnblogs.com/wolf-sun/p/4278503.html

你可能感兴趣的文章
c++ Constructor FAQ 继续
查看>>
ubuntu samba服务器多用户配置【转】
查看>>
母线的种类与作用是什么(转)
查看>>
【Xamarin 挖墙脚系列:IOS 开发界面的3种方式】
查看>>
Atitit.工作流系统的本质是dsl 图形化的dsl 4gl
查看>>
4-5-创建索引表-串-第4章-《数据结构》课本源码-严蔚敏吴伟民版
查看>>
go run main.go undefined? golang main包那点事
查看>>
从零开始写一个npm包,一键生成react组件(偷懒==提高效率)
查看>>
2017中国系统架构师大会“盛装”来袭
查看>>
中国最强的人工智能学术会议来了
查看>>
Metasploit的射频收发器功能 | Metasploit’s RF Transceiver Capabilities
查看>>
主库 归档 删除策略
查看>>
《Linux从入门到精通(第2版)》——导读
查看>>
路过下载攻击利用旧版 Android 漏洞安装勒索软件
查看>>
ThinkSNS 六大子版本体验及源码下载
查看>>
《算法基础》——1.5实际因素
查看>>
《Java数字图像处理:编程技巧与应用实践》——第3章 基本Swing UI组件与图像显示 3.1 JPanel组件与BufferedImage对象的显示...
查看>>
为什么有人讨厌 Google 的新 Logo?
查看>>
腾讯2017暑期实习编程题3
查看>>
Intellij IDEA 构建Spring Web项目 — 用户登录功能
查看>>