【问题标题】: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 根本不是数据库(应该被视为一个数据库,尤其是在性能方面)

    【讨论】:

    • 免责声明:我是 AweCsome 框架的贡献者
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 2011-01-20
    • 1970-01-01
    • 2021-02-23
    相关资源
    最近更新 更多