将ClientContext创建为Singleton,以及如何在ClientContext对象上创建包装器



我正在创建一个类库来管理sharepoint上的文件,我将使用CSOM库来实现这一点。

但我有点困惑,比如如何管理与实体框架的DbContext相同的客户端上下文,比如是将其创建为Singleton对象,还是每次使用时都使用和处理它。

以及我如何在ClientContext对象上创建包装器,就像我们在EF的DbContext上创建包装一样?

在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框架的相同结果看起来是这样的:

awecsomeTable = new AweCsomeTable(clientContext);
return awecsomeTable.InsertItem(course);

在这两个例子中,"课程"都是一个简单的实体。

请注意,Awecsome框架不允许所有SharePoint列表操作,但标准CRUD确实有效。它也缺乏像懒惰加载这样的功能,但它是目前最接近SharePoint上实体框架的功能。

您可能还想了解PnP(模式和实践),它在一些标准操作中有所帮助。

此外:ClientContext比DbContext多一点。它不仅涉及数据,还包含有关网站、用户和权限的信息。SharePoint根本不是数据库(应该被视为一个数据库,尤其是性能方面)

最新更新