2010-01-15 21 views
7

Tôi gặp sự cố khi nhận thư viện ODP.NEt để làm việc với .NET DBProviderFactories. Tôi gặp phải lỗi sau với mã này:DbProviderFactories cho lỗi .NET

_DBFactory = DbProviderFactories.GetFactory(providerName); 

Đã xảy ra lỗi khi tạo bộ xử lý cấu hình cho system.data: Cột 'InvariantName' bị ràng buộc là duy nhất. Giá trị 'Oracle.DataAccess.Client' đã có sẵn.

với providerName này: Oracle.DataAccess.Client

Và các mục sau đây trong 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> 

Có ai biết những gì là sai? Tôi không nghĩ rằng tôi có nó thiết lập hai lần bất cứ nơi nào.

+0

cùng một vấn đề và giải quyết http://stackoverflow.com/questions/4225908/error-when-adding-a-configuration-to-app-config-file –

Trả lời

6

Nếu bạn đã cài đặt ODP.net (ví dụ: sử dụng trình cài đặt phổ quát oracle, thay vì xcopy), bạn sẽ tìm thấy cùng một DbProviderFactories/add trong machine.config.

Vì vậy, thêm nó trong web.config của bạn là thêm nó lần thứ hai - vì vậy, nhân đôi Oracle.DataAccess.Client!

+0

Vậy địa điểm nào là "đúng"? – ThatAintWorking

+1

Vấn đề này cũng có thể xảy ra nếu bạn đã cài đặt ODP.net trước khi cài đặt phiên bản .NET bạn đang sử dụng, trong trường hợp của tôi là .NET4. –

+0

@ FredrikC: Cảm ơn nhận xét của bạn là có bất kỳ lệnh nào để đăng ký lại một lần nữa –

5

Bạn có thể làm như sau? (Lưu ý "rõ ràng")

<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

Cần lưu ý rằng <clear /> sẽ xóa tất cả DbProviderFactories mà bạn có thể không muốn làm, tùy thuộc vào tình hình của bạn.

Bạn cũng có thể chỉ là loại bỏ lớp ngay trước khi bạn thêm lại nó bằng cách thêm dòng này:

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

Dưới đây là toàn bộ <system.data> sẽ trông như thế nào:

<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> 

Điều này có thể hữu ích nếu môi trường máy chủ và máy chủ cục bộ của bạn không có tệp cấu hình phù hợp như machine.config.

Điều khác bạn có thể làm là chỉ cần xóa nó khỏi web.config của bạn tất cả cùng nhau giả định các thiết lập trong machine.config của bạn sẽ làm việc. Tuy nhiên, tôi sẽ kiểm tra điều này trên cả máy phát triển và máy chủ của bạn. Trong trường hợp của tôi, nó làm việc trên một nhưng không phải là khác vì các tập tin machine.config không phù hợp. Để giải quyết, tôi đã thêm thiết lập này cùng với Machine.config trên máy chủ mà không có sự <remove invariant="Oracle.ManagedDataAccess.Client" /> như vậy:

<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

lẽ Hầu hết các máy cấu hình DbProviderFactories tập tin phần bị rơi. Kiểm tra xem có thêm dòng Oracle.DataAccess.Client, vẫn còn sau khi gỡ cài đặt ứng dụng khách hay không.