在 Sharepoint 2010 中使用实体框架作为 Web 部件的数据源

Posted

技术标签:

【中文标题】在 Sharepoint 2010 中使用实体框架作为 Web 部件的数据源【英文标题】:Using Entity Framework as a Web Part's Data Source in Sharepoint 2010 【发布时间】:2011-02-18 15:39:48 【问题描述】:

我有一个非常简单的 Web 部件。我有一个单一的网格视图,我使用 linq 填充到实体(或者至少这是我想要做的)。实体数据模型 .edmx 文件与 Web 部件位于同一项目中,并且一切看起来都正常。当我调试项目时,它在实体模型构造函数上爆炸并显示错误消息:

指定的命名连接是 在配置中找不到, 不打算与 EntityClient 提供者,或无效。

我在App.Config中的连接字符串如下:

<add name="MyDBEntities" connectionString="metadata=res://*/MyDBEntityModel.csdl|res://*/MyDBEntityModel.ssdl|res://*/MyDBEntityModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=MyServer;Initial Catalog=MyDB;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

构造函数:

public MyDBEntities() : base("name=MyDBEntities", "MyDBEntities")

所以,根据我在其他地方读到的内容,我的问题是 SharePoint 看不到我的连接字符串。这意味着,当我运行/调试项目时,我的项目中的 App.Config 实际上并没有加载到 SharePoint 中。如果是这种情况,那么我如何在 Visual Studio 2010 中设置我的项目,以确保 SharePoint 除了主 SharePoint 配置文件之外还选择 App.Config。如果我必须手动复制连接字符串,是否有这样做的“最佳实践”程序?与实体框架相结合的 SharePoint Web 部件是否还没有准备好迎接黄金时段?

【问题讨论】:

【参考方案1】:

用于 Visual Studio 2010 的 SharePoint 工具已经出现,并将自动将许多必要的条目添加到 web.config 中。不幸的是,他们不会为您创建实体框架条目。为此,您需要为添加 EF 连接字符串的 Web 部件项目编写功能接收器。

SharePoint API 有一个名为 SPWebConfigModification 的对象。您应该编写一个使用此类的 FeatureActivated 事件来对 web.config 进行修改,然后编写一个 FeatureDeactivating 事件来删除修改。

-格雷格

【讨论】:

:) 非常感谢,您让我免于将东西移出 EF【参考方案2】:

我在 SharePoint 2010 WebPart 中遇到了同样的异常,我终于让它工作了,但我在此过程中学到了两件重要的事情。

    您必须使用场解决方案而不是沙盒解决方案。原因是沙盒解决方案无法访问网站集之外的数据。一个更有意义的异常将有助于快速解决这个问题,但我收到了上述异常。

    您的连接字符串必须在您安装 WebPart 的 Web 应用程序的 web.config 中。它不会在您安装 WebPart 时自动添加,因此您必须按照 Greg 上面列出的方式更新 web.config,或者手动编辑它。它位于 C:\inetpub\wwwroot\wss\VirtualDirectoriesWebApplicationName\web.config

【讨论】:

以上是关于在 Sharepoint 2010 中使用实体框架作为 Web 部件的数据源的主要内容,如果未能解决你的问题,请参考以下文章

EF + UnitOfWork + SharePoint RunWithElevatedPrivileges

将 Asp.Net UserControl 用作 SharePoint WebPart

如何在 SharePoint WebPart 中包含 JavaScript 文件?

在业务逻辑层使用实体框架生成的类

SharePoint 2010的使用FBA创建用户

是否可以在 Web 部件中使用多线程访问 SharePoint 2010 列表?