注入新创建的DbContext(EF7,ASP.NET 5,vnext)后,注入的依赖项DbContext为空。

瑞安

我对EF7相对较新,并且听说将DbContext依赖注入到Controller构造函数中是一种使DbContext在给定的Action方法中使用的好方法。但是,在许多情况下不可能进行依赖关系注入(例如,在普通类中访问Db),并且using(VectorDbContext dbContext...)必须使用模式。

我遇到了一个问题,using即通过依赖项注入的上下文无法访问将数据添加到使用该模式创建的DbContext中DbContext是用于测试的简单InMemory数据库-它不连接任何东西。

这是将实体添加到DbContext的代码,为了进行测试,我在Startup.cs中称其为:

using (ExampleDbContext dbContext= new ExampleDbContext()) {
    dbContext.Things.Add(
        new Thing() {
            Stuff= "something"
        });

    dbContext.SaveChanges();
}

这是控制器内的访问代码:

public class ExampleController : Controller {
    public ExampleController(ExampleDbContext exampleDbContext) {
        this.ExampleDbContext= exampleDbContext;
    }

    public ExampleDbContext ExampleDbContext { get; set; }

    public async Task<IActionResult> ExampleAction() {

        // new DbContext:
        using(ExampleDbContext dbContext = new ExampleDbContext ()) {
            var List1 = (await dbContext.Things
                .AsNoTracking()
                .ToListAsync());
        }

        // Injected DbContext:
        var List2 = (await this.ExampleDbContext.Things
            .AsNoTracking()
            .ToListAsync());
    }
}

单步执行时,List1中有预期的一项,但List2始终为空!

我究竟做错了什么?看来DbContext不同步,依赖注入如何创建DbContext /它来自何处?

编辑:我只是做了一些其他测试,并确认在创建的DbContext中添加的任何实体new仅在中可见new,而在Injected DbContext中添加的实体仅在Injected DbContext中可见,这使我相信它们正在连接到不同的实体支持数据库,但我无法确认。

谢尔盖·科洛迪(Sergey Kolodiy)

我可能错了,但是我的假设是,当您创建DbContextin代码的新实例时,您正在使用将基础连接字符串设置为某个默认值的无参数构造函数。但是,注入DIDbContext可以使用另一个构造函数来解决,该构造函数具有显式传入的不同连接字符串。

这是一个显式指定构造函数参数的Unity配置示例:

<register type="DbContext, [assembly-name]" mapTo="DbContext, [assembly-name]">
<constructor>
    <param name="nameOrConnectionString" value="Test"/>
</constructor>
</register>

因此,我将检查您的容器的配置。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ASP.NET vNext EF7 dbContext问题

来自分类Dev

ASP.NET vNext EF7 dbContext问题

来自分类Dev

如何在asp.net core和ef7中的并行方法中使用注入的DbContext?

来自分类Dev

ASP.NET 5 vNext依赖项注入(RoleManager)

来自分类Dev

ASP.net vnext依赖项注入

来自分类Dev

ASP.net vnext依赖项注入

来自分类Dev

何时通过依赖项注入将DbContext实例放置在ASP.NET Core 5中

来自分类Dev

在.NET Core控制台应用程序中为EF Core DbContext服务错误建立了依赖项注入

来自分类Dev

.NET Core 2.1 DbContext ObjectDisposedException依赖项注入

来自分类Dev

依赖注入。为ASP.NET vNext做准备

来自分类Dev

有没有一种方法可以让ASP.NET 5依赖项注入在没有引用的情况下解析DbContext?

来自分类Dev

在多个项目中的asp.net 5依赖项注入

来自分类Dev

如何使用 .Net Core 2.1 配置具有依赖项注入的 DbContext?

来自分类Dev

ASP.NET核心依赖项注入

来自分类Dev

ASP.NET核心依赖项注入

来自分类Dev

当ASP.net Identity与相同的DbContext正常工作时,为什么EF7会说我没有配置任何提供程序?

来自分类Dev

尝试在Ubuntu上运行新创建的ASP.NET vNext项目,但出现错误

来自分类Dev

ASP.NET-MVC-5 依赖注入

来自分类常见问题

带有依赖项注入的EF核心DbContext

来自分类Dev

带有依赖项注入的EF核心DbContext

来自分类Dev

将IConfiguration对象注入DbContext后,为什么它为null?[ASP.NET Core 3.1]

来自分类Dev

ASP .NET MVC 5 Checkbox循环以获取新创建的值

来自分类Dev

ASP.NET将DbContext注入Identity UserManager

来自分类Dev

ASP.Net 5配置依赖项注入和静态控制器构造函数

来自分类Dev

.NET中的调试依赖项注入

来自分类Dev

无法手动重新创建Unity容器控制的对象(EF dbcontext)

来自分类Dev

使用EF7和VNext访问DBContext

来自分类Dev

尝试在EF7和ASP.NET5中使用DbSet <TEntity> .Where()

来自分类Dev

以编程方式注入asp.net核心的依赖项

Related 相关文章

  1. 1

    ASP.NET vNext EF7 dbContext问题

  2. 2

    ASP.NET vNext EF7 dbContext问题

  3. 3

    如何在asp.net core和ef7中的并行方法中使用注入的DbContext?

  4. 4

    ASP.NET 5 vNext依赖项注入(RoleManager)

  5. 5

    ASP.net vnext依赖项注入

  6. 6

    ASP.net vnext依赖项注入

  7. 7

    何时通过依赖项注入将DbContext实例放置在ASP.NET Core 5中

  8. 8

    在.NET Core控制台应用程序中为EF Core DbContext服务错误建立了依赖项注入

  9. 9

    .NET Core 2.1 DbContext ObjectDisposedException依赖项注入

  10. 10

    依赖注入。为ASP.NET vNext做准备

  11. 11

    有没有一种方法可以让ASP.NET 5依赖项注入在没有引用的情况下解析DbContext?

  12. 12

    在多个项目中的asp.net 5依赖项注入

  13. 13

    如何使用 .Net Core 2.1 配置具有依赖项注入的 DbContext?

  14. 14

    ASP.NET核心依赖项注入

  15. 15

    ASP.NET核心依赖项注入

  16. 16

    当ASP.net Identity与相同的DbContext正常工作时,为什么EF7会说我没有配置任何提供程序?

  17. 17

    尝试在Ubuntu上运行新创建的ASP.NET vNext项目,但出现错误

  18. 18

    ASP.NET-MVC-5 依赖注入

  19. 19

    带有依赖项注入的EF核心DbContext

  20. 20

    带有依赖项注入的EF核心DbContext

  21. 21

    将IConfiguration对象注入DbContext后,为什么它为null?[ASP.NET Core 3.1]

  22. 22

    ASP .NET MVC 5 Checkbox循环以获取新创建的值

  23. 23

    ASP.NET将DbContext注入Identity UserManager

  24. 24

    ASP.Net 5配置依赖项注入和静态控制器构造函数

  25. 25

    .NET中的调试依赖项注入

  26. 26

    无法手动重新创建Unity容器控制的对象(EF dbcontext)

  27. 27

    使用EF7和VNext访问DBContext

  28. 28

    尝试在EF7和ASP.NET5中使用DbSet <TEntity> .Where()

  29. 29

    以编程方式注入asp.net核心的依赖项

热门标签

归档