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

时间:2018-12-22 13:50:14

标签: c# sharepoint dependency-injection wrapper csom

我正在创建一个类库来管理共享点上的文件,我将为此使用CSOM库。

但是我有点困惑,例如如何管理与实体框架的DbContext相同的Client Context ,例如是将其创建为Singleton对象还是使用并在每次使用时进行处置。

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

1 个答案:

答案 0 :(得分:0)

没有什么比内置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 Framework不允许所有SharePoint List操作,但是标准CRUD可以工作。它还缺少延迟加载等功能,但它是您现在最接近SharePoint上的实体框架的功能。

您可能还想看看PnP(Patterns and practices),它有助于一些标准操作。

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