【问题标题】:How do you execute native SQL using Entity Framework when using the DataContext through an Interface通过接口使用 DataContext 时如何使用实体框架执行本机 SQL
【发布时间】: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对象。它由上下文自动初始化 - 如果您的代码使用真实的上下文。顺便提一句。您不需要公开数据库。您可以在上下文接口上公开一个方法,并将数据库访问封装在派生上下文的实现中。
  • 哦,哇,我刚刚经历了一个巨大的荷马辛普森时刻!!!非常感谢,效果很好!作为答案提交,我一定会标记

标签: entity-framework-5


【解决方案1】:

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

【讨论】:

  • 一个没有代表发表评论的用户正在要求一个这样做的例子here。最好使用该示例更新此答案,然后将链接的问题作为此问题的副本关闭。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多