【问题标题】:Create ClientContext as Singleton and how to create wrapper over clientcontext object?将 ClientContext 创建为 Singleton 以及如何在 clientcontext 对象上创建包装器?
【发布时间】:2018-12-22 13:50:14
【问题描述】:
我正在创建一个类库来管理 sharepoint 上的文件,我将为此使用 CSOM 库。
但我有点困惑,比如如何管理Client Context ,这与实体框架的 DbContext 相同,比如是将其创建为 Singleton 对象还是每次使用时都使用和处置。
还有我如何在 ClientContext 对象上创建一个包装器,就像我们在 EF 的 DbContext 上创建包装器一样?
【问题讨论】:
标签:
c#
sharepoint
dependency-injection
wrapper
csom
【解决方案1】:
在 CSOM 中内置甚至可用,没有什么能比得上真正的实体框架。使用 CSOM 编程更像是在使用纯 CSOM 时使用数据集。因此,使用 CSOM 在 SharePoint 中存储数据如下所示:
List courseList= clientContext.Web.Lists.GetByTitle("Course");
clientContext.Load(courseList);
clientContext.ExecuteQuery();
var courseItemInformation = new ListItemCreationInformation();
ListItem courseItem = courseList.AddItem(courseItemInformation);
courseItem["Title"] = course.Title;
courseItem["Coach"] = course.Coach;
courseItem["Description"] = course.Description;
courseItem["Audience"] = course.Audience.ToString();
courseItem.Update();
clientContext.ExecuteQuery();
return courseItem.Id;
然而,有一个名为“AweCsome-Framework”的框架试图模仿实体框架的行为。上面使用 aweCsome 框架的相同结果如下所示:
awecsomeTable = new AweCsomeTable(clientContext);
return awecsomeTable.InsertItem(course);
在这两个例子中,“课程”都是一个简单的实体。
请注意,Awecsome 框架不允许所有 SharePoint 列表操作,但标准 CRUD 确实有效。它还缺少延迟加载等功能,但它是您目前可以在 SharePoint 上获得的最接近实体框架的功能。
您可能还想看看 PnP (Patterns and practices),它有助于一些标准操作。
另外:ClientContext 不仅仅是一个 DbContext。它不仅与数据有关,还包含有关站点、用户和权限的信息。 SharePoint 根本不是数据库(应该被视为一个数据库,尤其是在性能方面)