SharePoint服务器端对象模型 之 使用LINQ进行数据访问操作(Part 3)
(五)使用LINQ进行数据更新
LINQ to SharePoint的优势不仅在于可以方便快捷地进行SharePoint列表数据查询,SPMetal所生成的数据实体类实际上是一个支持双向同步的模型,也就是意味着通过DataContext我们还可以将数据的变动提交到SharePoint列表中。
通过DataContext进行数据提交主要分成三个阶段:(1)确保DataContext支持数据提交,即其中的ObjectTrackingEnabled属性为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: }
在向列表中提交新数据的时候,需要使用EntityList的InsertOnSubmit方法添加相应的数据实体。同样的,也可以使用InsertAllOnSubmit方法同时插入多个数据实体,比如将在一个列表中的查询结果一次性添加到另外一个使用相同内容类型的列表中。
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、数据的删除
与数据添加类似,数据的删除使用EntityList的DeleteOnSubmit方法删除一个实体(即一个列表条目),使用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是先将数据缓存,修改后再统一进行提交,因此在多人协同编辑的真实环境中也不可避免的会出现数据提交冲突问题。关于冲突的解决,由于篇幅所限不在这里列出,有兴趣的读者可以参考如下网址:
http://msdn.microsoft.com/en-us/library/ee538246(office.14).aspx