LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据
2010-05-13 20:34
951 查看
LINQ和LINQtoSQL都已经不是一个新事物了,但是我接触的比较晚,本着绝知此事要躬行的态度,决定写这个系列。
本文使用的测试环境是VS2010,和sqlserver2005数据库。
1.从CUD开始,如何使用LINQtoSQL插入、修改、删除数据
2.查询使用LINQtoSQL做简单查询
3.查询延迟加载与立即加载,使用LoadWith和AssociateWith
4.查询innerjoin,leftouterjoin
5.LinqtoSQL中的聚合
6.LINQtoSQL查询优化,需要忧虑性能吗?
第一篇从CUD开始,如何使用LINQtoSQL插入、修改、删除数据
准备工作,现在数据库中建好测试表Student,这个表只有三个字段ID,Name,Hometown,其中ID为int类型的自增长字段,Name和Howmtown是nvarchar类型
1.打开VS2010新建控制台应用程序,然后添加LINQtoSQLClass,命名为DbApp.dbml,新建dbml文件之后,可以打开serverexplorer,建立数据库连接,并将我们新建的表拖到dbml文件中,结果如下图
2.可以通过点击dbml文件空白处,按F4显示dbml属性,可以修改Context和生成实体的命名空间
3.到现在为止VS2010通过工具为我们创建好了数据表对应实体类和数据表操作添,改,删的方法,现在开始实践
1)添加Add
viewsource
print?
输出的sql语句
viewsource
print?
2)使用linqtosql执行Edit编辑操作
viewsource
print?
viewsource
print?
viewsource
print?
3)使用linqtosql执行删除操作
执行代码:
viewsource
print?
生成的sql语句:
viewsource
print?
总结:通过以上实践可以看到使用linqtosql执行增改删操作,非常方便,我们甚至不需要学习任何sql相关的知识。
我有两点疑惑,请各位指点:
1.是否是在执行update和delete时必须先获得实体,然后才能执行操作,我尝试在update时,不去数据库中获取实体,而是自己声明一个实体,然后去删除,但是失败了
2.在生成的update和delete的条件语句中包含name=@p和hometown=@p的语句,按理说linktosql已经知道id是唯一的主键,为什么还会传这些没有的条件进去的
本文使用的测试环境是VS2010,和sqlserver2005数据库。
1.
2.查询使用LINQtoSQL做简单查询
3.查询延迟加载与立即加载,使用LoadWith和AssociateWith
4.查询innerjoin,leftouterjoin
5.LinqtoSQL中的聚合
6.LINQtoSQL查询优化,需要忧虑性能吗?
第一篇从CUD开始,如何使用LINQtoSQL插入、修改、删除数据
准备工作,现在数据库中建好测试表Student,这个表只有三个字段ID,Name,Hometown,其中ID为int类型的自增长字段,Name和Howmtown是nvarchar类型
1.打开VS2010新建控制台应用程序,然后添加LINQtoSQLClass,命名为DbApp.dbml,新建dbml文件之后,可以打开serverexplorer,建立数据库连接,并将我们新建的表拖到dbml文件中,结果如下图
2.可以通过点击dbml文件空白处,按F4显示dbml属性,可以修改Context和生成实体的命名空间
3.到现在为止VS2010通过工具为我们创建好了数据表对应实体类和数据表操作添,改,删的方法,现在开始实践
1)添加Add
01 | static void Add() |
02 | { |
03 | //添加一个Student |
04 | StudentaStudent= new Student |
05 | { |
06 | Name= "张小二" , |
07 | Hometown= "南海观音院" |
08 | }; |
09 | Console.WriteLine( "----------beginAddastudent" ); |
10 | using (DbAppDataContextdb= new DbAppDataContext()) |
11 | { |
12 | db.Log=Console.Out; |
13 | db.Students.InsertOnSubmit(aStudent); |
14 | db.SubmitChanges(); |
15 | } |
16 |
17 | Console.WriteLine( "----------EndAddastudent" ); |
18 | } |
1 | INSERT INTO [dbo].[Student]([ Name ],[Hometown]) |
2 | VALUES (@p0,@p1) |
3 |
4 | SELECT CONVERT ( Int ,SCOPE_IDENTITY()) AS [value] |
5 | --@p0:InputNVarChar(Size=4000;Prec=0;Scale=0)[张小二] |
6 | --@p1:InputNVarChar(Size=4000;Prec=0;Scale=0)[南海观音院] |
7 | --Context:SqlProvider(Sql2005)Model:AttributedMetaModelBuild:4.0.30319.1 |
01 | private static void Edit( int id) |
02 | { |
03 | Console.WriteLine( "----------beginedit" ); |
04 | using (DbAppDataContextdb= new DbAppDataContext()) |
05 | { |
06 | db.Log=Console.Out; |
07 |
08 | //取出student |
09 | vareditStudent=db.Students.SingleOrDefault<Student>(s=>s.ID==id); |
10 |
11 | if (editStudent== null ) |
12 | { |
13 | Console.WriteLine( "id错误" ); |
14 | return ; |
15 | } |
16 |
17 | //修改student的属性 |
18 | editStudent.Name= "张小三" ; |
19 | editStudent.Hometown= "张家口张家寨张家营" ; |
20 |
21 | //执行更新操作 |
22 | db.SubmitChanges(); |
23 |
24 | } |
25 | Console.WriteLine( "---------endeditStudent" ); |
26 | } |
1 | 输出的sql语句 |
01 | <PRE class =brush:sql>SELECT[t0].[ID],[t0].[Name],[t0].[Hometown] |
02 | FROM[dbo].[Student]AS[t0] |
03 | WHERE[t0].[ID]=@p0 |
04 | --@p0:InputInt(Size=-1;Prec=0;Scale=0)[6] |
05 | --Context:SqlProvider(Sql2005)Model:AttributedMetaModelBuild:4.0.30319.1 |
06 |
07 | UPDATE[dbo].[Student] |
08 | SET[Name]=@p3,[Hometown]=@p4 |
09 | WHERE([ID]=@p0)AND([Name]=@p1)AND([Hometown]=@p2) |
10 | --@p0:InputInt(Size=-1;Prec=0;Scale=0)[6] |
11 | --@p1:InputNVarChar(Size=4000;Prec=0;Scale=0)[张小二] |
12 | --@p2:InputNVarChar(Size=4000;Prec=0;Scale=0)[南海观音院] |
13 | --@p3:InputNVarChar(Size=4000;Prec=0;Scale=0)[张小三] |
14 | --@p4:InputNVarChar(Size=4000;Prec=0;Scale=0)[张家口张家寨张家营] |
15 | --Context:SqlProvider(Sql2005)Model:AttributedMetaModelBuild:4.0.30319.1 |
16 | </PRE> |
执行代码:
01 | static void Delete( int id) |
02 | { |
03 | Console.WriteLine( "-----------begindeleteastudent" ); |
04 | using (DbAppDataContextdb= new DbAppDataContext()) |
05 | { |
06 | db.Log=Console.Out; |
07 | //取出student |
08 | varstudent=db.Students.SingleOrDefault<Student>(s=>s.ID==id); |
09 |
10 | if (student== null ) |
11 | { |
12 | Console.WriteLine( "studentisnull" ); |
13 | return ; |
14 | } |
15 |
16 | db.Students.DeleteOnSubmit(student); |
17 |
18 | db.SubmitChanges(); |
19 | } |
20 | Console.WriteLine( "------------endDeletestudent" ); |
21 | } |
01 | SELECT[t0].[ID],[t0].[Name],[t0].[Hometown] |
02 | FROM[dbo].[Student]AS[t0] |
03 | WHERE[t0].[ID]=@p0 |
04 | --@p0:InputInt(Size=-1;Prec=0;Scale=0)[6] |
05 | --Context:SqlProvider(Sql2005)Model:AttributedMetaModelBuild:4.0.30319.1 |
06 |
07 | DELETEFROM[dbo].[Student]WHERE([ID]=@p0)AND([Name]=@p1)AND([Hometown |
08 | ]=@p2) |
09 | --@p0:InputInt(Size=-1;Prec=0;Scale=0)[6] |
10 | --@p1:InputNVarChar(Size=4000;Prec=0;Scale=0)[张小三] |
11 | --@p2:InputNVarChar(Size=4000;Prec=0;Scale=0)[张家口张家寨张家营] |
12 | --Context:SqlProvider(Sql2005)Model:AttributedMetaModelBuild:4.0.30319.1 |
我有两点疑惑,请各位指点:
1.是否是在执行update和delete时必须先获得实体,然后才能执行操作,我尝试在update时,不去数据库中获取实体,而是自己声明一个实体,然后去删除,但是失败了
2.在生成的update和delete的条件语句中包含name=@p和hometown=@p的语句,按理说linktosql已经知道id是唯一的主键,为什么还会传这些没有的条件进去的
相关文章推荐
- LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据
- LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据
- LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据[转]
- LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据
- LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据
- LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据
- LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据
- LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据
- LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据 (转)
- 如何使用LINQ to SQL插入、修改、删除数据
- 【LINQ专题】使用LINQ to SQL插入、修改、删除数据
- 如何使用 LINQ 执行插入、修改和删除操作
- 扩展LINQ to SQL:使用Lambda Expression批量删除数据
- 扩展LINQ to SQL:使用Lambda Expression批量删除数据 推荐
- 扩展LINQ to SQL:使用Lambda Expression批量删除数据
- 扩展LINQ to Entity:使用Lambda Expression批量删除数据------让微软帮我们生成T-SQL语句
- 使用SQL语句对表进行插入、修改和删除数据操作
- Linq to sql:使用存储过程删除数据
- 扩展LINQ to SQL:使用Lambda Expression批量删除数据
- 如何构建和使用EF,用linqToSql实现对数据的操作