【发布时间】:2013-03-15 20:18:14
【问题描述】:
设置
好的,所以我有一个遵循 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;}
}
我必须公开数据库对象才能访问 ExecuteSQL 方法。但是现在当我在我的服务中运行它时,数据库对象返回一个空引用异常,我不知道如何初始化它。任何帮助将不胜感激!
乔什
【问题讨论】:
-
你没有初始化
Database对象。它由上下文自动初始化 - 如果您的代码使用真实的上下文。顺便提一句。您不需要公开数据库。您可以在上下文接口上公开一个方法,并将数据库访问封装在派生上下文的实现中。 -
哦,哇,我刚刚经历了一个巨大的荷马辛普森时刻!!!非常感谢,效果很好!作为答案提交,我一定会标记