2010-10-27 39 views
9

Tôi đang thử Thư viện doanh nghiệp 5.0 và đang thực hiện một số kiểm tra đơn vị trên BL của mình, tôi có cần ứng dụng không. cấu hình trên DL hoặc trên dự án thử nghiệm?Đã xảy ra lỗi kích hoạt khi cố gắng lấy loại cơ sở dữ liệu, khóa "" <- blank

lưu ý: Tôi đã có cài đặt cấu hình trên web.config trên dự án web của mình.

làm thế nào tôi sử dụng DAAB:

private static Database db = DatabaseFactory.CreateDatabase(); 

db.ExecuteNonQuery("spInsertSalesman", salesman.Fullname); 

app.config của tôi trên DL:

<configuration> 
    <configSections> 
     <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" /> 
    </configSections> 
    <dataConfiguration defaultDatabase="DBTEST" /> 
    <connectionStrings> 
     <add name="DBTEST" connectionString="Data Source=[dbsource];Initial Catalog=[dbname];User Id=sa;Password=password;" 
      providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
</configuration> 
+0

bất kỳ ai ở đây có thể trợ giúp? –

+0

Tệp cấu hình có thể là với dự án thử nghiệm, nhưng tôi không chắc liệu tệp đó có hoạt động hay không. Bạn đang sử dụng khung kiểm tra nào? –

+1

vâng, tôi đã tự tìm ra rằng tôi đã tham khảo bản sao không đúng. nó hoạt động ngay bây giờ, nhờ sự giúp đỡ./ –

Trả lời

0

tôi đã tham khảo các bản sao .dll sai. nó hoạt dộng bây giờ.

+0

Đối với tôi, nó vẫn không hoạt động – Harsh

0

Vì thư viện lớp có thể có tệp app.config. Nó thực sự không hữu ích khi bạn đang sử dụng EntLib 5.0 & muốn truy cập chuỗi kết nối trong lớp libarry. Do đó bạn cần thêm cấu hình ở trên vào tất cả các tệp web.config mà bạn đang sử dụng trong giải pháp của mình. Ví dụ, nếu bạn có UI layer, WCF layer giữa Business (class library) và UI layer và Business layer nằm giữa WCF service và DAL (class Library).

Ở đây bạn sẽ có một tệp web.config trong mỗi lớp giao diện người dùng & Lớp phục vụ WCF, vì vậy, hai tệp web.config này phải được lồng ghép các cài đặt được đề cập ở trên.

-2

tôi đã có thể khắc phục lỗi này trong dự án DLL của tôi bằng cách xác định tên của chuỗi kết nối một cách rõ ràng trong các cuộc gọi CreateDatabase, như thế này:

Database db = DatabaseFactory.CreateDatabase("DBTEST"); 

thay vì

Database db = DatabaseFactory.CreateDatabase(); 
1

Đây là do dll không phù hợp giữa các dlls GAC (Dlls trong assembly) và các dll được giới thiệu bởi ứng dụng.

Xóa các dll khỏi assembly và thử chạy.

  1. Start -> Run
  2. Loại hội
  3. Tháo dll mà lỗi kích hoạt đang xảy ra.
  4. Đặt lại IIS

Hy vọng nó sẽ giải quyết được sự cố của bạn.

0

Tôi có cùng một vấn đề và tôi giải quyết nó bằng cách thay đổi EntLib từ 5.0 đến 3.1

2

Để thêm vào các lý do khác.

Tôi đã có giải pháp VS2010/csproj đã tham chiếu Thư viện doanh nghiệp 5.0.xxxxx.

Tuy nhiên, csproj được đặt thành "Target 3.5 Framework". Vì vậy, tôi hoặc là cần thiết để nhắm mục tiêu khuôn khổ 4.0 hoặc đi xuống "xuống" phiên bản 3.5 của Thư viện doanh nghiệp.

Tôi đã có thể cập nhật khung đích của mình thành 4.0 và sau đó các lỗi đã biến mất.

Dưới đây là những gì bạn có thể làm để tìm ra những gì phiên bản khung mã đã được biên soạn cho: (mini kịch bản Powershell)

[System.Reflection.Assembly]::LoadFrom("c:\somefolder\Any_Of_The_Practices.dll").ImageRuntimeVersion 

Nếu bạn nhận được v2.0.50727, sau đó bạn sẽ gặp khó khăn khi chạy dưới Framework 4.0 (hoặc cao hơn).

EDIT:

Tôi cũng gặp lỗi này do không xác định đúng "DbProviderFactories". Tôi đăng một cấu hình MySql mà tôi tìm thấy tại URL này: (Tôi sao chép nó, trong trường hợp URL chết trong tương lai)

(Từ http://searchcode.com/codesearch/view/14385662)

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
<configSections> 
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true"/> 
</configSections> 

<system.data> 
<DbProviderFactories> 
<add name="EntLibContrib.Data.MySql" 
invariant="EntLibContrib.Data.MySql" 
description="EntLibContrib Data MySql Provider" 
type="EntLibContrib.Data.MySql.MySqlDatabase, EntLibContrib.Data.MySql, Version=5.0.505.0, Culture=neutral, PublicKeyToken=null" /> 
</DbProviderFactories> 
</system.data> 

<dataConfiguration defaultDatabase="Default Connection String"> 
<providerMappings> 
<add databaseType="EntLibContrib.Data.MySql.MySqlDatabase, EntLibContrib.Data.MySql, Version=5.0.505.0, Culture=neutral, PublicKeyToken=null" 
name="EntLibContrib.Data.MySql"/> 
</providerMappings> 
</dataConfiguration> 

<connectionStrings> 
<add name="Default Connection String" 
connectionString="database=northwind;uid=root;pwd=admin" 
providerName="EntLibContrib.Data.MySql"/> 
</connectionStrings> 

<startup> 
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
</startup> 
</configuration> 

Cuối cùng:

Khi tôi gặp lỗi này vì tôi không có ConnectionString (trong tệp cấu hình) có cùng tên với giá trị defaultDatabase. Aka, lỗi "hộp sọ tê" đơn giản.

Bạn có thể đặt mã van an toàn này vào (ngay trước khi bạn tạo cơ sở dữ liệu) nếu bạn muốn.

 DatabaseSettings dataConfig = (DatabaseSettings)ConfigurationManager.GetSection("dataConfiguration"); 
     string configDefaultDatabase = string.Empty; 
     if (null != dataConfig) 
     { 
      configDefaultDatabase = dataConfig.DefaultDatabase; 

      if (!String.IsNullOrEmpty(configDefaultDatabase)) 
      { 
       ConnectionStringSettingsCollection connections = ConfigurationManager.ConnectionStrings; 
       if (null == connections[configDefaultDatabase]) 
       { 
        throw new ArgumentOutOfRangeException(
         string.Format(
          "Your dataConfiguration (DefaultDatabase) does not match any of your connection strings. DefaultDatabase='{0}'.", 
          configDefaultDatabase)); 
       } 
      } 
     } 
0

Đảm bảo máy chủ của bạn đã cài đặt trình kết nối MySQL .net. Tôi đã nhận được lỗi tương tự cho đến khi tôi cài đặt trình kết nối. http://www.mysql.com/products/connector/

Các vấn đề liên quan