0

設定

わかりましたので、オニオンアーキテクチャアプローチに従うアプリケーションがあります。

フロントエンド リファレンス > サービスとドメイン

サービス参照 > ドメインとデータ

データ参照 > ドメイン

ドメイン参照 > なし

私は最新バージョンの EF を使用しており、Unity を IOC としても使用しています。

問題

私のアプリケーションのサービス層は、インターフェイスを介してデータ層の DataContext にアクセスします。

public class TestService : ITestService
{
    private readonly IDataContext _context;

    public TestService(IDataContext context)
    {
         _context = context;
    }

    public BaseResponse SomeServiceCall(BaseRequest request)
    {
           _context.Database.ExecuteSqlCommand("SELECT * FROM test");
    }
}

 public class DataContext : DbContext, IDataContext
 {
    public DataContext() :
        base("DefaultConnection")
    {
          Database.SetInitializer<DataContext>(null);
    }

   public DataContext(string connection) :
        base(connection)
    {
        Database.SetInitializer<DataContext>(null);
    }

    public Database Database { get; set; }

    Public IDBContext<Test> Tests {get;set;}
}

 public interface IDataContext
 {
      Database Database { get; set; }

      IDBContext<Test> Tests {get;set;}
 }

ExecuteSQL メソッドにアクセスするには、Database オブジェクトを公開する必要がありました。しかし、これを自分のサービスで実行すると、データベース オブジェクトが null 参照例外を返し、それを初期化する方法がわかりません。どんな助けでも大歓迎です!

ジョシュ

4

1 に答える 1

1

Databaseオブジェクトを初期化しません。コードが実際のコンテキストを使用している場合は、コンテキストによって自動的に初期化されます。ところで。データベースを公開する必要はありません。コンテキストインターフェイスでメソッドを公開し、派生コンテキストでの実装でデータベースアクセスをラップできます。

于 2013-03-19T09:23:11.767 に答える