0

设置

好的,所以我有一个遵循 Onion 架构方法的应用程序,即:

前端参考 > 服务和域

服务参考 > 领域和数据

数据参考 > 域

领域参考 > 没有

我使用的是最新版本的 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;}
 }

我必须公开 Database 对象才能访问 ExecuteSQL 方法。但是现在当我在我的服务中运行它时,数据库对象返回一个空引用异常,我不知道如何初始化它。任何帮助将不胜感激!

乔什

4

1 回答 1

1

您不初始化Database对象。它由上下文自动初始化 - 如果您的代码使用真实的上下文。顺便提一句。您不需要公开数据库。您可以在上下文接口上公开一个方法,并将数据库访问包装在派生上下文的实现中。

于 2013-03-19T09:23:11.767 回答