2010-01-15 71 views
7

我無法使ODP.NEt庫與.NET DBProviderFactory一起使用。我收到以下錯誤使用此代碼:用於.NET的DbProviderFactories錯誤

_DBFactory = DbProviderFactories.GetFactory(providerName); 

出錯創建system.data配置節處理程序:列「InvariantName」約束是唯一的。值'Oracle.DataAccess.Client'已經存在。

本的providerName:Oracle.DataAccess.Client

而且在web.config以下條目:

<system.data> 
    <DbProviderFactories> 
     <add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description=".Net Framework Data Provider for Oracle" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=10.2.0.100, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 
    </DbProviderFactories> 
    </system.data> 

有誰知道什麼是錯?我認爲我沒有在任何地方設置兩次。

+0

相同的問題和解決方法http://stackoverflow.com/questions/4225908/error-when-adding-a-configuration-to-app-config-file – 2012-12-22 14:03:38

回答

6

如果您安裝了ODP.net(例如使用oracle通用安裝程序,而不是xcopy),則會在machine.config中找到相同的DbProviderFactories/add。

因此增加它在你的web.config中添加了第二遍 - 所以,複製Oracle.DataAccess.Client!

+0

那麼哪個地方是「正確的」? – ThatAintWorking 2013-03-26 18:52:36

+1

如果您在安裝您使用的.NET版本之前安裝了ODP.net,那麼也會發生此問題,在我的情況下爲.NET4。 – 2014-01-15 09:43:49

+0

@FredrikC:感謝您的評論是有任何命令來註冊一遍 – 2014-05-26 14:22:22

5

你能做到以下嗎? (請注意「清除」)

<system.data> 
    <DbProviderFactories> 

     <clear /> 

     <add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description=".Net Framework Data Provider for Oracle" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=10.2.0.100, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 

    </DbProviderFactories> 
    </system.data> 
1

應當指出的是,<clear />將清除所有DbProviderFactories,你可能不希望這樣做,根據您的情況。

你也可以只刪除類權之前,通過加入這一行重新添加:

<remove invariant="Oracle.ManagedDataAccess.Client" />

下面是整個<system.data>看起來:

<system.data> 
    <DbProviderFactories> 
     <remove invariant="Oracle.ManagedDataAccess.Client" /> 
     <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" 
      type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 
    </DbProviderFactories> 
    </system.data> 

這可能是如果您的本地機器和服務器環境沒有匹配的配置文件(例如machine.config),則很有用。

你可以做的另一件事就是將它從你的web.config中一起移除,假設你的machine.config中的設置將起作用。不過,我會在你的開發機器和你的服務器上進行測試。在我的情況下,它在一個工作,但不是另一個,因爲machine.config文件不匹配。要解決,我添加了這個相同的設置到Machine.config中的服務器上,而不<remove invariant="Oracle.ManagedDataAccess.Client" />像這樣:

<system.data> 
    <DbProviderFactories> 
     <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" 
      type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 
    </DbProviderFactories> 
    </system.data> 
1

最大的可能是機器配置文件DbProviderFactories節崩潰。 檢查是否有額外的Oracle.DataAccess.Client行,在卸載oracle客戶端後仍然存在。