2010-05-12 111 views
5

我有一個非常簡單的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部件與實體框架結合是否尚未準備好進入黃金時段?

回答

6

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

1

我用同樣的異常摔在SharePoint 2010的WebPart,我終於得到了它的工作,但這裏是我一路上學到兩個重要的事情。

  1. 您必須使用服務器場解決方案而不是沙盒解決方案。原因是,沙箱解決方案無法訪問網站集外的數據。一個更有意義的例外會有助於快速解決這個問題,但我正在接受上述例外。

  2. 您的連接字符串必須位於安裝WebPart的Web應用程序的web.config中。它不會在安裝WebPart時自動添加,因此您必須按照Greg上面列出的方式更新web.config,或者手動編輯它。它位於C:\ inetpub \ wwwroot \ wss \ VirtualDirectories {WebApplicationName} \ web.config