在 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="Data Source=MyServer;Initial Catalog=MyDB;Integrated Security=True;MultipleActiveResultSets=True"" 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