SharePointサーバ側オブジェクトモデルのLINQによるデータアクセス操作(Part 3)

5196 ワード

(五)LINQによるデータ更新
LINQ to SharePointの利点は、SharePointリストのデータクエリを容易かつ迅速に実行できることだけでなく、SPMetalによって生成されるデータエンティティクラスは、実際には双方向同期をサポートするモデルであり、つまり、DataContextによってSharePointリストにデータの変動をコミットできることを意味します.
DataContextによるデータコミットは主に3つの段階に分けられる:(1)DataContextがデータコミットをサポートしていることを確認する.すなわち、ObjectTracckingEnabled属性がtrue(デフォルト)であることを確認する.(2)データエンティティの内容を修正する.(3)DataContextのSubmitChangesメソッドを呼び出してデータをコミットする.
1、データの新規作成
リストにエントリを新規作成する場合は、次の例に示すように、エンティティオブジェクトを作成し、対応するリスト(EntityList)に追加できます.
   1: using (BookDataContext ctx = 
   2: new BookDataContext("http://sp2010/book"))
   3: {
   4:     var newChpater = 
   5:         new Chapters  () 
   6:          { 
   7:                 = "Ch02", 
   8:              Name = "Visual Studio 2010", 
   9:              Writer = "Kaneboy" 
  10:          };
  11:     ctx.Chapters.InsertOnSubmit(newChpater);
  12:     ctx.SubmitChanges();
  13: }

リストに新しいデータをコミットする場合は、Entity ListのInsertOnSubmitメソッドを使用して対応するデータエンティティを追加する必要があります.同様に、InsertAllOnSubmitメソッドを使用して複数のデータエンティティを同時に挿入することもできます.たとえば、1つのリストにあるクエリー結果を同じコンテンツタイプを使用する別のリストに一度に追加することもできます.
2、データの修正
DataContextでは、SharePointリストのデータの変更は、そのデータエンティティを直接変更し、SubmitChangesを呼び出してデータの更新を行うことができます.たとえば、次のようになります.
   1: using (BookDataContext ctx = 
   2:     new BookDataContext("http://sp2010/book"))
   3: {
   4:     foreach(var ch in ctx.Chapters)
   5:         ch.Writer = "kaneboy";
   6:     ctx.SubmitChanges();
   7: }

3、データの削除
データの追加と同様に、データの削除はEntity ListのDeleteOnSubmitメソッドを使用して1つのエンティティ(リストエントリ)を削除し、DeleteAllOnSubmitメソッドを使用して複数のエンティティを削除します.たとえば、次のようになります.
   1: using (BookDataContext ctx = 
   2:     new BookDataContext("http://sp2010/book"))
   3: {
   4:     var uselessChapters = from chp in ctx.Chapters
   5:                            where chp.Name.Contains("[  ]")
   6:                                select chp;
   7:     ctx.Chapters.DeleteAllOnSubmit(uselessChapters);
   8:     ctx.SubmitChanges();
   9: }

リストエントリ(すなわち、SPListItem)のDeleteメソッドと同様に、EntityListのDeleteOnSubmitとDeleteAllOnSubmitは、リストエントリを完全に削除します.コンテンツをごみ箱に削除する場合は、RecycleOnSubmitメソッドとRecycleAllOnSubmitメソッドを使用します.
 
ヒント:DataSetと同様に、DataContextはデータをキャッシュし、変更してから一括してコミットするため、複数の人が共同で編集する実際の環境でもデータコミット競合の問題が発生することは避けられません.衝突の解決については、紙面に限られているため、興味のある読者は以下のURLを参考にすることができます.
http://msdn.microsoft.com/en-us/library/ee538246(office.14).aspx