在Entity Framework中使用Entity Framework作为Sharepoint 2010中Web部件的数据源

问题描述:

我有一个非常简单的Web部件。我有一个单一的网格视图,我使用linq填充实体(或者至少这是我想要做的)。实体数据模型.edmx文件位于与Web部件相同的项目中,并且所有内容都处于正常工作状态。当我调试项目,它吹起来的实体模型构造与错误消息:在Entity Framework中使用Entity Framework作为Sharepoint 2010中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部件与实体框架结合是否尚未准备好进入黄金时段?

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

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

-Greg

+0

:)非常感谢你,你从EF中移除了东西 – anpatel 2013-05-30 18:34:00

我用同样的异常摔在SharePoint 2010的WebPart,我终于得到了它的工作,但这里是我一路上学到两个重要的事情。

  1. 您必须使用服务器场解决方案而不是沙盒解决方案。原因是,沙箱解决方案无法访问网站集外的数据。一个更有意义的例外会有助于快速解决这个问题,但我正在接受上述例外。

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