天天看點

ALinq 入門學習(五)--删除修改資料

1.簡單的資料删除

删除資料和Linq to SQL 方式是一樣的,都是先從資料庫中取出改行資料然後再删除。也就是說對于對象操作室操作删除對象。下面是根據主鍵删除一行資料代碼

ALinq 入門學習(五)--删除修改資料
ALinq 入門學習(五)--删除修改資料

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架構,可以使用實體來代理資料庫表中的關系。是以我們隻需建立好實體之間的關系就能很友善的操作資料。同時在我們一般項目過程中,資料庫是不會建立表和表之間的關聯關系。下面是級聯删除資料操作執行個體代碼

ALinq 入門學習(五)--删除修改資料
ALinq 入門學習(五)--删除修改資料

ALinq 級聯操作删除資料

 2         /// 級聯删除

 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. 級聯操作删除部分資料

在項目過程中,我們需要删除外鍵表中的部分資料,這裡也就表明不會删除主鍵表中的資料。這裡的删除和上面的删除方式有一點不同,我們是根據主鍵表實體對象中的屬性(外鍵表對象集合)對應關系移除資料對象.表述可能不是太清楚,代碼比較明确。

ALinq 入門學習(五)--删除修改資料
ALinq 入門學習(五)--删除修改資料

ALinq 級聯删除外鍵部分資料

 2         /// 删除外鍵的部分資料

 4         public void FunctionDeleteT()

 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. 簡單修改資料

單純的修改一行資料和删除一行資料是一樣的,都是先從資料庫中取出當行資料,并以對象形式删除反映到資料庫。

ALinq 入門學習(五)--删除修改資料
ALinq 入門學習(五)--删除修改資料

ALinq 簡單修改一行資料

 1  /// <summary>

 2         /// 修改資料

 4         public void FunctionUpdate()

 8             role.RoleName = "dddddddd";

5. 同時修改多行資料

前面介紹過,對資料的修改都是想将資料從資料庫中取出緩存到記憶體,然後統一送出到資料庫。同時修改多行資料也是如此,先取出多行資料反應到記憶體,然後我們對資料對象進行修改,這些資料修改之後也是儲存到記憶體中。隻有到SubmitChanges()執行之後就會反應到資料庫中。 

ALinq 入門學習(五)--删除修改資料
ALinq 入門學習(五)--删除修改資料

ALinq 同時修改多行資料

 2         /// 一次修改多條資料

 4         public void FunctionManeyUpdate()

 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的管理。在後續的過程中又要對這些資料進行修改,隻是從新回到管制狀态下。

ALinq 入門學習(五)--删除修改資料
ALinq 入門學習(五)--删除修改資料

ALinq Attach() 方法修改資料

 2         /// 使用Attach 方法來更新資料

 4         public void FunctionAttachUpdate()

 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() 的用法是一樣的,隻是操作資料行的多少問題,這裡不再累述。看看這個方法使用的代碼:

ALinq 入門學習(五)--删除修改資料
ALinq 入門學習(五)--删除修改資料

ALinq AttachAll() 修改多行資料

 2         /// 使用attacheAll 來更新資料

 4         public void FunctionAttachAllUpdate()

 6             IList<TabUser> list = new List<TabUser>();

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         }