代码改变世界

ALinq 入门学习(五)--插入数据

2010-05-07 15:22  贺臣  阅读(2382)  评论(11编辑  收藏  举报

Linq to SQL 的插入相对于ADO.NEt 来说是少了很多工作。ALinq 的插入和Linq to SQL 也非常相似。这几篇文章可能对于有些人来说是很肤浅的,如果懂Linq to SQL 的同仁来说,这些东西就是积分中的事情,因为这些东西基本一样,只需要注意一些小的细节即可。声明一次,如果有人觉得这文章很垃圾,请不要恶言相对,不留言即可。谢谢!!。希望博客园的还是以技术交流为主,不要有过多的口舌之争!!

 

1. 插入单行数据

  数据库表在实体设计器中会生成对应的实体对象,我们可以通过这些对象来操作代理操作数据库。

如果需要插入一行数据:new一个对象,使用InsertOnSubmit方法将其加入到对应的集合中,使用SubmitChanges()提交到数据库 , InsertOnSubmit()方法先将数据写入内存中,然后有SubmitChanges()统一提交持久化到数据库中。

ALinq 插入一行数据
 1 /// <summary>
 2         /// 插入单个实体对象
 3         /// </summary>
 4         public void FunctionInsEntity()
 5         {
 6             OA_DBDataContext context = new OA_DBDataContext(connectionString);
 7             TabRole role = new TabRole();
 8             role.Ext1 = "";
 9             role.Ext2 = "";
10             role.Ext3 = "";
11             role.Ext4 = "";
12             role.Ext5 = "";
13             role.ISFobid = 0;
14             role.Remark = "查看权限";
15             role.RoleName = "查看权限";
16             context.TabRole.InsertOnSubmit(role);
17 
18             //context.GetTable<TabRole>().InsertOnSubmit(role);
19             context.SubmitChanges();
20         }

 

上面代码中有一行被注释了的代码,这句代码也可以插入一个实体对象。当然如果两个同时使用,只能提交一行数据到数据库中。

 

2. 插入多行数据

有时候我们插入数据不仅仅是插入一行数据,如果在对同一个表插入数据的时候有多行数据插入,我们每连接一次数据库然后插入一行数据,这样对于性能是一个极大的损耗,上面的提到过了, InsertOnSubmit() 可以先将数据存储到内存中 然后统一提交到数据。

ALinq 插入多行数据
 1 /// <summary>
 2         /// 插入多个实体对象
 3         /// </summary>
 4         public void FunctionInsmanyEntity()
 5         {
 6             OA_DBDataContext context = new OA_DBDataContext(connectionString);
 7             IList<TabRole> list = new List<TabRole>();
 8             for (int i = 0; i < 5; i++)
 9             {
10                 TabRole role = new TabRole();
11                 role.Ext1 = (i + 1).ToString();
12                 role.Ext2 = (i + 2).ToString();
13                 role.Ext3 = (i + 3).ToString();
14                 role.Ext4 = (i + 4).ToString();
15                 role.Ext5 = (i + 5).ToString();
16                 role.ISFobid = i % 2 == 0 ? 0 : 1;
17                 role.Remark = "查看权限" + i;
18                 role.RoleName = "查看权限" + i;
19                 list.Add(role);
20             }
21             context.TabRole.InsertAllOnSubmit(list);
22             context.SubmitChanges();
23         }

 

这个方法中 创建了5个对象,使用InsertAllOnSubmit() 方法将5个对象同时保存到内存中,这个方式和上面InsertOnSubmit()方法作用相同,只是保存的是一个集合。最后也是使用SubmitChanges()提交到数据库。

 

3.级联插入数据

 在数据库中存在两个主外键关系的表,我们使用实体设计器建立实体关系,并生产相应的实体对象。我们需要的操作是,当插入子表数据的时候,同时指定主键表的实体,而这个实体本身也是要新建的。也就是说要先生成一个逐渐表ID,然后再插入到子表中(外见表).这个操作在Linq to SQL 中是可以行的,但是在ALinq 中好像不行。这个问题可能是我本人还没有了解清楚,不过这里先介绍一下ALinq 中的用法,之后我去找ALinq 的作者了解一下情况然后补充。

Linq to SQL 级联插入数据
 1 /// <summary>
 2         /// 插入有关联关系的实体
 3         /// </summary>
 4         public void FunctionInsRelaEntity()
 5         {
 6             OA_DBDataContext context = new OA_DBDataContext(connectionString);
 7             TabRole role = new TabRole();
 8             role.Ext1 = "";
 9             role.Ext2 = "";
10             role.Ext3 = "";
11             role.Ext4 = "";
12             role.Ext5 = "";
13             role.ISFobid = 0;
14             role.Remark = "级联关系";
15             role.RoleName = "级联关系";
16 
17             TabUser user = new TabUser
18             {
19                 Address = "上海",
20                 Age = 23,
21                 Birthday = DateTime.Now,
22                 CardID = "421022195905303919",
23                 Descript = "",
24                 Ext1 = "",
25                 Ext2 = "",
26                 Ext3 = "",
27                 Ext4 = "",
28                 Ext5 = "",
29                 ISFobid = 0,
30                 RoleId = 1,
31                 IsMarried = 0,
32                 PassWord = "sdfsdf",
33                 Remark = "备注",
34                 Sex = 0,
35                 TabRole = role,
36                 UserName = "sdfsdf"
37             };
38             context.TabUser.InsertOnSubmit(user);
39             context.SubmitChanges();
40         }
41 

 

 

4.动态操作数据

在java Hibernate 中有个方法很不错,那就是当数据存在主键值对应的数据时就修改,如果没有就增加一行数据。Linq to SQL 也支持这个操作,但是ALinq 又好像不支持,说到这里感觉ALinq 还是有很多弊端的,不过这些都不影响我们使用,一般使用这种操作都很少的,我们可以使用其他的方式来替代。下面看看Linq to SQL 中的动态修改数据方法。

Linq to SQL 动态修改数据
 1 /// <summary>
 2         /// 重写数据
 3         /// </summary>
 4         public void FunctionOverrideData()
 5         {
 6             OA_DBDataContext context = new OA_DBDataContext(connectionString);
 7             TabRole role = new TabRole
 8             {
 9                 Ext1 = "ddd",
10                 Ext2 = "ddd",
11                 Ext3 = "ddd",
12                 Ext4 = "ddd",
13                 Ext5 = "ddd",
14                 ISFobid = 0,
15                 Remark = "级联关系",
16                 RoleName = "级联关系",
17                 Id = 2
18             };
19             context.TabRole.InsertOnSubmit(role);
20             context.SubmitChanges();
21         }

 

 


作者:情缘
出处:http://www.cnblogs.com/qingyuan/
关于作者:从事仓库,生产软件方面的开发,在项目管理以及企业经营方面寻求发展之路
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
联系方式: 个人QQ  821865130 ; 仓储技术QQ群 88718955,142050808 ;
吉特仓储管理系统 开源地址: https://github.com/hechenqingyuan/gitwms