visual-studio-2015 - ASP.NET 5、Entity Framework 7 和 SQL Server 2014 - 多个 dbContexts、SQL View

标签 visual-studio-2015 dbcontext asp.net-core sql-server-2014 entity-framework-core

我在 Visual Studio 2015 中创建了一个解决方案,其中包含一个 Web 项目(使用 ASP.NET 5 Beta 6 Web 应用程序预览模板)和一个模型项目(使用 Entity Framework 7 Beta 6)。

我已经到了可以从 SQL Server 数据库获取数据并将其显示在页面上的地步。然后,我想尝试从两个不同的数据库中提取数据,但在尝试使用多个 dbContext 时遇到了问题。

在 Startup.cs 中,我添加了 EF 服务并添加了一个 dbContext,效果很好。但我不确定如何添加多个...下面的代码是我尝试添加另一个的方式,但第二个 AddDbContext 似乎只是覆盖了第一个。

我还遇到了另一个与此相关的问题。我无法从 SQL View 中获取数据。我已经确认该 View 确实包含数据,但是当我编写一个 WebAPI 方法从该 View 获取数据时,响应不包含任何内容。在过去使用 EF6 的项目中,我在建模 View 和从中检索数据时没有遇到任何问题。

总结一下我的问题:

  1. 如何使用 EF7 在 ASP.NET 5 网络项目中设置多个 dbContext?
  2. 如何在 EF7 中为 SQL Server View 建模?

Startup.cs:

public IConfiguration Configuration { get; set; }

public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)
{
    // Setup configuration sources.
    var builder = new ConfigurationBuilder(appEnv.ApplicationBasePath)
        .AddJsonFile("config.json")
        .AddEnvironmentVariables();
    Configuration = builder.Build();
}

// This method gets called by a runtime.
// Use this method to add services to the container
public void ConfigureServices(IServiceCollection services)
{
    // Register Entity Framework
    services.AddEntityFramework()
        .AddSqlServer()
        .AddDbContext<MyContextA>(options =>
            options.UseSqlServer(Configuration["Data:DefaultConnection:AConnectionString"])
        )
        .AddDbContext<MyContextB>(options =>
            options.UseSqlServer(Configuration["Data:DefaultConnection:BConnectionString"])
        );

    services.AddMvc();
}

config.json

{
  "Data": {
    "DefaultConnection": {
      "AConnectionString": "data source=xxxxxxx;initial catalog=xxxxxxxx;Uid=xxxxxxxxx;Pwd=xxxxxx;",
      "BConnectionString": "data source=xxxxxxx;initial catalog=xxxxxxxx;Uid=xxxxxxxxx;Pwd=xxxxxx;"
    }
  },
  "EntityFramework": {
    "MyContextA": {
      "ConnectionStringKey": "Data:DefaultConnection:AConnectionString"
    },
    "MyContextB": {
      "ConnectionStringKey": "Data:DefaultConnection:BConnectionString"
    }
  }
}

MyContextA.cs

public class MyContextA : DbContext
{
    public MyContextA (DbContextOptions options) : base(options) { }
    public DbSet<Product> Product { get; set; }
    public DbSet<Some_View> Some_View { get; set; }
}

MyContextB.cs

public class MyContextB : DbContext
{
    public MyContextB (DbContextOptions options) : base(options) { }
    public DbSet<Customer> Customer { get; set; }
}

Product.cs

public class Product
{
    [Key]
    public int ID { get; set; }
    public int Name { get; set; }
}

Some_View.cs

public class Some_View
{
    public int SomeField { get; set; }
    public int AnotherField { get; set; }
}

TestController.cs

[Route("api/[controller]")]
public class TestController : Controller
{
    private readonly MyContextA _dbContext;

    // Constructor
    public TestController(MyContextA dbContext)
    {
        _dbContext = dbContext;
    }

    // GET: api/values
    [HttpGet]
    public IEnumerable<Some_View> Get()
    {
        var data = _dbContext.Some_View;
        return data;
    }
}

我能够使用一个 dbContext 并使用常规表(例如上例中的 Product)来使一切正常工作。但是,当我尝试使用 View 时,我得不到任何数据,而当我使用多个上下文时,第二个上下文会覆盖第一个。

最佳答案

尝试将 DbContext 的构造函数更改为如下所示:

public MyContextA (DbContextOptions<MyContextA> options) : base(options) { }
public MyContextB (DbContextOptions<MyContextB> options) : base(options) { }

尝试调用 ToList()

return data.ToList();

这些中的每一个都可能是您想要在 EF 上提交的错误和 MVC repo 。

关于visual-studio-2015 - ASP.NET 5、Entity Framework 7 和 SQL Server 2014 - 多个 dbContexts、SQL View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32101170/

相关文章:

c++ - 警告 MSB8012 为 VS 2015 构建 fltk.sln

visual-studio-2015 - Visual Studio Professional 2015 - 无法连接到 VSO - SplitterDistance 错误

.net - DbContext ChangeTracker : Id of Added Entity for Auditing

c# - 无法获取 UserManager 类

c# - Visual Studio 2015 调试自定义控件

sql-server - 在开发过程中保持 SQL Server 数据库项目和实际数据库(在 SSMS 中)同步

c# - 在 c# 控制台应用程序中启动 2 个 DBContext 对象,一个用于日志,另一个用于业务数据

c# - Entity Framework : Why is DbContext a concrete Class and not an abstract class?

javascript - 如何使用asp.net core在action方法中接收通过ajax请求发送的文件和整数

docker - 响应状态码不表示成功 : 401 (Unauthorized) - Azure Devops Feed ASP. NET Core 3.1 Docker Build