ALinq 入门学习(五)--删除修改数据

简介: 1.简单的数据删除 删除数据和Linq to SQL 方式是一样的,都是先从数据库中取出改行数据然后再删除。也就是说对于对象操作室操作删除对象。下面是根据主键删除一行数据代码ALinq 主键删除一行数据 1 ///  2         /// ALinq 的简单删除数据形式 3     ...


1.简单的数据删除

删除数据和Linq to SQL 方式是一样的,都是先从数据库中取出改行数据然后再删除。也就是说对于对象操作室操作删除对象。下面是根据主键删除一行数据代码

img_405b18b4b6584ae338e0f6ecaf736533.gif ALinq 主键删除一行数据
 1  ///   <summary>
 2           ///  ALinq 的简单删除数据形式
 3           ///   </summary>
 4           public   void  FunctionDelete()
 5          {
 6              OA_DBDataContext context  =   new  OA_DBDataContext(connectionString);
 7              TabRole role  =  context.TabRole.Single(r  =>  r.Id  ==   14 );
 8              context.TabRole.DeleteOnSubmit(role);
 9              context.SubmitChanges();
10          }

 

 

2. 级联操作删除数据

级联操作删除数据,就是如果我删除主键表中的一行数据,则我要同时删除外键表中对应的数据。这是为了保证数据的准确性和完整性。但是ALinq 并不是说删除主键表中的数据就能自动删除外键表中的数据。它必须先删除外键表中的数据然后删除主键表中的数据。当然这里说的主外键关系式一个相对而言的,在实际的数据库中并不一定有物理存在的主外键关系,因为ALinq 本事就是一个ORM框架,可以使用实体来代理数据库表中的关系。所以我们只需建立好实体之间的关系就能很方便的操作数据。同时在我们一般项目过程中,数据库是不会建立表和表之间的关联关系。下面是级联删除数据操作实例代码

img_405b18b4b6584ae338e0f6ecaf736533.gif ALinq 级联操作删除数据
 1  ///   <summary>
 2           ///  级联删除
 3           ///   </summary>
 4           ///   <returns></returns>
 5           public   void  FunctionDeleteJion()
 6          {
 7              OA_DBDataContext context  =   new  OA_DBDataContext(connectionString);
 8              TabRole role  =  context.TabRole.Single(r  =>  r.Id  ==   1 );
 9              var tabUsers  =  from u  in  context.TabUser  where  u.RoleId  ==   1  select u;
10               foreach  (TabUser user  in  tabUsers)
11              {
12                  context.TabUser.DeleteOnSubmit(user);
13              }
14              context.TabRole.DeleteOnSubmit(role);
15              context.SubmitChanges();
16          }
17 

 

 

3. 级联操作删除部分数据

在项目过程中,我们需要删除外键表中的部分数据,这里也就表明不会删除主键表中的数据。这里的删除和上面的删除方式有一点不同,我们是根据主键表实体对象中的属性(外键表对象集合)对应关系移除数据对象.表述可能不是太清楚,代码比较明确。

img_405b18b4b6584ae338e0f6ecaf736533.gif ALinq 级联删除外键部分数据
 1  ///   <summary>
 2           ///  删除外键的部分数据
 3           ///   </summary>
 4           public   void  FunctionDeleteT()
 5          {
 6              OA_DBDataContext context  =   new  OA_DBDataContext(connectionString);
 7              TabRole role  =  context.TabRole.Single(r  =>  r.Id  ==   1 );
 8              TabUser user  =  role.TabUser.First();
 9              role.TabUser.Remove(user);
10              context.SubmitChanges();
11          }

 

这里不是直接删除对象,而是从集合中移除数据。刚才说到了,这些对象对应着数据的关系,因此我们移除对象中的数据然后反映到数据库中就可以删除对应的数据。

 

4. 简单修改数据

单纯的修改一行数据和删除一行数据是一样的,都是先从数据库中取出当行数据,并以对象形式删除反映到数据库。

img_405b18b4b6584ae338e0f6ecaf736533.gif ALinq 简单修改一行数据
 1    ///   <summary>
 2           ///  修改数据
 3           ///   </summary>
 4           public   void  FunctionUpdate()
 5          {
 6              OA_DBDataContext context  =   new  OA_DBDataContext(connectionString);
 7              TabRole role  =  context.TabRole.Single(r  =>  r.Id  ==   1 );
 8              role.RoleName  =   " dddddddd " ;
 9              context.SubmitChanges();
10          }

 

 

5. 同时修改多行数据

前面介绍过,对数据的修改都是想将数据从数据库中取出缓存到内存,然后统一提交到数据库。同时修改多行数据也是如此,先取出多行数据反应到内存,然后我们对数据对象进行修改,这些数据修改之后也是保存到内存中。只有到SubmitChanges()执行之后就会反应到数据库中。 

img_405b18b4b6584ae338e0f6ecaf736533.gif ALinq 同时修改多行数据
 1  ///   <summary>
 2           ///  一次修改多条数据
 3           ///   </summary>
 4           public   void  FunctionManeyUpdate()
 5          {
 6              OA_DBDataContext context  =   new  OA_DBDataContext(connectionString);
 7              IList < TabUser >  list  =  context.TabUser.Where(u  =>  u.Id  >   2 ).Select(u  =>  u).ToList < TabUser > ();
 8               foreach  (TabUser usr  in  list)
 9              {
10                  usr.Ext1  =  usr.Id.ToString()  +  usr.UserName;
11              }
12              context.SubmitChanges();
13          }

 

 

6.使用Attach() 关联一行数据修改

Attach() 方法也可以反应修改数据。 之前的删除数据和修改数据都是在DataContext下关联的。在某些情况下,我们修改或删除数据并不一定是在DataContext 的管理下,那这样的对象就不受DataContext控制,也就是我们所说的游离状态。如果我们需要对这些数据进行操作,我们就得让这些数据在DataContext 的管理下。下面的这个例子,先查询出一个对象,将这个对象值赋给另外一个不受DataContext管理的对象。使之不受DataContext的管理。在后续的过程中又要对这些数据进行修改,只是从新回到管制状态下。

img_405b18b4b6584ae338e0f6ecaf736533.gif ALinq Attach() 方法修改数据
 1  ///   <summary>
 2           ///  使用Attach 方法来更新数据
 3           ///   </summary>
 4           public   void  FunctionAttachUpdate()
 5          {
 6              TabRole role  =   null ;
 7               using  (OA_DBDataContext context1  =   new  OA_DBDataContext(connectionString))
 8              {
 9                  TabRole tempRole  =  context1.TabRole.Single(r  =>  r.Id  ==   1 );
10                  role  =   new  TabRole()
11                  {
12                      Id  =  tempRole.Id,
13                      Ext1  =  tempRole.Ext1,
14                      Ext2  =  tempRole.Ext2,
15                      Ext3  =  tempRole.Ext3,
16                      Ext4  =  tempRole.Ext4,
17                      Ext5  =  tempRole.Ext5,
18                      ISFobid  =  tempRole.ISFobid,
19                      Remark  =  tempRole.Remark,
20                      RoleName  =  tempRole.RoleName
21                  };
22              }
23 
24               using  (OA_DBDataContext context2  =   new  OA_DBDataContext(connectionString))
25              {
26                  context2.TabRole.Attach(role);
27                  role.RoleName  =  role.RoleName  +   "  attache " ;
28                  context2.SubmitChanges();
29              }
30          }

 

这里游离状态的role 对象 在Attache() 方法的作用下使之从新回到管制状态下,然后对数据的修改也会反映到数据中。 

 

7. 使用AttachAll() 关联多行数据修改

 AttachAll() 的用法和Attache() 的用法是一样的,只是操作数据行的多少问题,这里不再累述。看看这个方法使用的代码:

img_405b18b4b6584ae338e0f6ecaf736533.gif ALinq AttachAll() 修改多行数据
 1  ///   <summary>
 2           ///  使用attacheAll 来更新数据
 3           ///   </summary>
 4           public   void  FunctionAttachAllUpdate()
 5          {
 6              IList < TabUser >  list  =   new  List < TabUser > ();
 7               using  (OA_DBDataContext context1  =   new  OA_DBDataContext(connectionString))
 8              {
 9                  TabRole tempRole  =  context1.TabRole.Single(r  =>  r.Id  ==   1 );
10                  var tabUsers = tempRole.TabUser.Select(c => c);
11                   foreach (TabUser user  in  tabUsers)
12                  {
13                      list.Add( new  TabUser() { 
14                          Address = user.Address,
15                          Age = user.Age,
16                          Birthday = user.Birthday,
17                          CardID = user.CardID,
18                          Descript = user.Descript,
19                          Ext1 = user.Ext1,
20                          Ext2 = user.Ext2,
21                          Ext3 = user.Ext3,
22                          Ext4 = user.Ext4,
23                          Ext5 = user.Ext5,
24                          ISFobid = user.ISFobid,
25                          IsMarried = user.IsMarried,
26                          PassWord = user.PassWord,
27                          Remark = user.Remark,
28                          Sex = user.Sex,
29                          RoleId = user.RoleId,
30                          UserName = user.UserName,
31                          Id = user.Id
32                      });
33                  }
34              }
35 
36               using  (OA_DBDataContext context2  =   new  OA_DBDataContext(connectionString))
37              {
38                  context2.TabUser.AttachAll(list);
39                   foreach  (TabUser user  in  list)
40                  {
41                      user.UserName  =  user.UserName  +   "    " + user.Id.ToString();
42                  }
43                  context2.SubmitChanges();
44              }
45          }

 

 

相关文章
|
2月前
|
C++
MFC编程 -- 列表删除单行及多行操作
MFC编程 -- 列表删除单行及多行操作
9 1
|
3月前
|
SQL 关系型数据库 MySQL
Mysql基础篇(创建、管理、增删改表)-2
Mysql基础篇(创建、管理、增删改表)
95 0
|
3月前
|
存储 SQL 关系型数据库
Mysql基础篇(创建、管理、增删改表)-1
Mysql基础篇(创建、管理、增删改表)
117 0
|
6月前
|
存储 BI 数据库
使用 FOR ALL ENTRIES 将 ABAP 内表内容作为数据库表的读取条件之一试读版
使用 FOR ALL ENTRIES 将 ABAP 内表内容作为数据库表的读取条件之一试读版
48 0
|
9月前
|
SQL 关系型数据库 MySQL
php开发实战分析(1):mysql操作字段(添加、删除、修改,多数据表中新增多个字段)
php开发实战分析(1):mysql操作字段(添加、删除、修改,多数据表中新增多个字段)
115 0
|
存储 自然语言处理 算法
【MySQL从入门到精通】【高级篇】(十九)索引的分类&创建索引的三种方式&删除索引的两种方式
MySQL中的索引包括普通索引、全文索引、单列索引、多列索引和空间索引等。
193 0
【MySQL从入门到精通】【高级篇】(十九)索引的分类&创建索引的三种方式&删除索引的两种方式
|
存储 关系型数据库 MySQL
MySql基础-笔记4 -数据表创建、删除和数据插入、查询等操作
MySql基础-笔记4 -数据表创建、删除和数据插入、查询等操作
103 0
MySql基础-笔记4 -数据表创建、删除和数据插入、查询等操作
|
SQL 关系型数据库 MySQL
MySQL基础-表操作~修改数据
修改数据的具体语法为: UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [ WHERE 条件 ] ;
115 0
|
SQL 关系型数据库 MySQL
MySQL基础-表操作~案例(下)
修改字段名和字段类型
95 0
|
SQL 存储 关系型数据库
MySQL基础-表操作~案例(上)
设计一张员工信息表,要求如下:
240 0