4

私はこの問題への答えを探し回っていましたが、以前に尋ねられたものはすべてこれの複雑なバリエーションのようであり、質問に答えていないので、私はただ尋ねるべきだと思いました。

私は次の3層アプリケーションを開発しています.....

  • DAL-EntityFrameworkを使用したデータアクセス層
  • BLL-ビジネスロジックレイヤー
  • Webアプリ-MVCWebアプリケーション

Entity Frameworkモデル、リポジトリクラスを作成しました。接続文字列は、DALApp.Configファイルにあります。これで、BLLに最初のクラスが作成され、DALが参照されます。次の非常に基本的な方法をテストしようとすると、BLLに接続文字列がないことに関連するエラーが発生します。

public static List<DAL.Item> getItems() {

        List<DAL.Item> result = new List<Item>();

        DAL.Repositories.ItemRepository myRepository = new    DAL.Repositories.ItemRepository();
        result = myRepository.GetAll().ToList();

        return result;

    }

BLLが接続文字列を探すのはなぜですか?私はここで本当に明白な何かを逃していますか?

複数のレイヤーにまたがる接続文字列を含める必要があり、n層構造の目的が損なわれる場合、これを行うための最良の方法はどのようになりますか?誰かが私のためにこれにいくつかの光を当てることができますか?

4

3 に答える 3

2

DALのインスタンスを新しく作成し、構成ファイルを調べようとします(スコープがビジネスレイヤー/単体テストにあるため見つかりません。制御の反転(IoC)を調べる必要があります。 )そして、DALをビジネスロジックレイヤーに挿入します。次に、DALをモックアウトして、実際に構成ファイル/データベースなどにアクセスしようとしないようにすることができます。

于 2013-01-03T14:20:40.460 に答える
0

接続文字列属性をapp.configからweb.config接続文字列セクションにそのままコピーします...このiwllは解決します

于 2013-01-03T14:20:41.507 に答える
0

接続文字列はプレゼンテーション層(この場合はmvcプロジェクト)にある必要があります。connectionStringsweb.configのノードにエントリを追加System.Configurationし、データレイヤーで読み取ります。

web.configで接続文字列を定義します

<connectionStrings>
    <add name="ConnectionStringName" connectionString="Data Source=.\SQLEXPRESS; Database=DataBaseName;..." providerName="System.Data.SqlClient" />
</connectionStrings>

Entity-FrameworkのDataContextで、web.configファイルのキーを渡すことができます

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext()
        : base("ConnectionStringName")
    {
    }

    // DbSet properties...
}

構成ファイルから読み取り、文字列を取得するには、System.Configurationアセンブリの参照を追加して、これを試す必要があります。

using System.Configuration;

string connectionString = ConfigurationManager.ConnectionStrings["connectionStringName"].ConnectionString;
于 2013-01-03T14:23:12.673 に答える