2011-08-23 62 views
3

我試圖創建一組自定義類來創建我自己的提供程序,實體框架將與之通信。我創建了自定義類,該類繼承自抽象類DbProviderFactory,並且剛開始測試以確定是否可以與EF交談,但遇到了問題。EF4創建自定義DbFactoryProvider和其他Db *類

<configuration> 
    <system.data> 
    <DbProviderFactories> 
     <add name="Custom Data Provider" 
      invariant="CustomClient" 
      description=".Net Framework Data Provider for Custom" 
      type="CustomClient.CustomProviderFactory, CustomClient, 
      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
    </DbProviderFactories> 
    </system.data> 
    <connectionStrings> 
    <add name="AdventureWorksEntities" 
    connectionString="metadata=...; 
    provider=CustomClient; 
    provider connection string=&quot;data source=.; 
    initial catalog=AdventureWorks;integrated security=True; 
    multipleactiveresultsets=True;App=EntityFramework&quot;" 
    providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
</configuration> 

通過上面我定義我的一個CustomClient認爲這將是航行順利進入實體善良,但是當我的代碼試圖創建一個新的AdventureWorksEntities對象,我得到以下異常:

出現InvalidOperationException 請求。 Net Framework數據提供程序的實現沒有System.Data.Common.DbProviderFactory派生類型的實例字段。

查看DbProviderFactory的可用覆蓋沒有提及實例成員。我不確定爲什麼它需要這個字段,如果它不是DbProviderFactory的類/接口的一部分。該修復是否像提供名爲實例的字段一樣簡單,該字段將返回我自定義類型的對象?

回答

5

添加到您的自定義提供:

public static readonly CustomProviderFactory Instance = new CustomProviderFactory(); 

所有在建工廠擁有這一點 - 它們被用作單。

+0

爲什麼它不是在抽象類中作爲一個必須實現的字段強制執行? – ShelbyZ

+0

這是API的作者的問題。 –

+1

不存在靜態抽象字段(摘要不能是靜態的)。但是,是的,這是一個糟糕的設計。 – xanadont