从Entity Framework Core中的cookie和基本路径创建数据库上下文

安德鲁斯

Postgres数据库具有多个方案,例如company1,company2,... companyN

浏览器发送包含方案名称的cookie。数据访问操作应在此方案中发生。Web应用程序用户可以选择不同的方案。在这种情况下,将设置不同的cookie值。

使用了Npgsql EF核心数据提供程序。

ASP NET MVC 5 Core应用程序在StartUp.cs中注册了工厂:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddHttpContextAccessor();
        services.AddScoped<IEevaContextFactory, EevaContextFactory>();
      ....

家庭控制器尝试使用它:

public class HomeController : EevaController
{
    public ActionResult Index()
    {
        var sm = new SchemeManager();
        sm.PerformInsert();
    ....

由于工厂成员为null,因此将引发异常。如何解决呢?

public interface IEevaContextFactory
{
    EevaContext Create();
}

public class EevaContextFactory : IEevaContextFactory
{
    private IHttpContextAccessor httpContextAccessor;
    private IConfiguration configuration;

    public EevaContextFactory(IHttpContextAccessor httpContextAccessor, IConfiguration configuration)
    {
        this.httpContextAccessor = httpContextAccessor;
        this.configuration = configuration;
    }

    public EevaContext Create()
    {
        var builder = new DbContextOptionsBuilder<EevaContext>();
        var pathbase = httpContextAccessor.HttpContext.Request.PathBase.Value;
        var scheme = httpContextAccessor.HttpContext.Request.Cookies["Scheme"];

        var csb = new NpgsqlConnectionStringBuilder()
        {
            Host = pathbase,
            SearchPath = scheme
        };
        builder.UseNpgsql(csb.ConnectionString);
        return new EevaContext(builder.Options);
    }
}

方案数据访问方法:

public class SchemeManager
{
    readonly IEevaContextFactory factory;

    public SchemeManager(IEevaContextFactory factory)
    {
        this.factory = factory;
    }

    public SchemeManager()
    {
    }

    public void PerformInsert()
    {
        using (var context = factory.Create())
        {
            var commandText = "INSERT into maksetin(maksetin) VALUES (CategoryName)";
            context.Database.ExecuteSqlRaw(commandText);
        }
    }
}
尼尔·W
var sm = new SchemeManager()

...将在SchemeManager上调用无参数构造函数,因此不会注入IEevaContextFactory。您应该将工厂注入控制器,然后将其传递给SchemeManager。

删除您的无参数构造函数。不需要

public class HomeController : EevaController
{
    private IEevaContextFactor eevaFactory;
           
    public HomeController(IEevaContextFactory factory)
    {
         eevaFactory = factory;
    }
        
    public ActionResult Index()
    {
         var sm = new SchemeManager(eevaFactory);
         sm.PerformInsert();
         ....
    }
}

您的另一个选择是将SchemeManager放入DI容器中,然后DI容器将在构造函数上自动解析IEevaContextFactory,然后将SchemeManager注入到您的控制器中。

无论哪种方式,都删除该无参数的构造函数。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将对象列表添加到Entity Framework中的数据库上下文

来自分类Dev

每次Entity Framework数据库迁移后如何访问上下文

来自分类Dev

在Entity Framework中使用DbSet而不是IDbSet模拟数据库上下文类

来自分类Dev

227个Mapped类的子类型导致慢速Entity Framework数据库上下文初始化?

来自分类Dev

从Postgres数据库为Entity Framework Core创建类

来自分类Dev

如何使用Entity Framework以可编辑的DataGridView和上下文跟踪更改的方式筛选数据?

来自分类Dev

将 DbContext.SaveChanges 异常记录到 Entity Framework/Entity Framework Core 中的数据库

来自分类Dev

我的上下文未从Entity Framework Core中的DbContext继承

来自分类Dev

在Entity Framework Core中为所有数据库创建和应用迁移

来自分类Dev

在Entity Framework Core中为所有数据库创建和应用迁移

来自分类Dev

Entity Framework Core 不在我的数据库中创建表

来自分类Dev

使用多个Entity Framework上下文并行查询

来自分类Dev

尝试模拟Entity Framework上下文时抛出TargetInvocationException

来自分类Dev

无法使用Entity Framework Core 3.1.3更新数据库

来自分类Dev

无法使用Entity Framework Core更新数据库

来自分类Dev

Entity Framework Core 中的 SqlGeometry

来自分类Dev

来自WCF数据服务的Entity Framework 6数据上下文

来自分类Dev

Entity Framework Core 腳手架附加表而不是上下文

来自分类Dev

ASP.NET Core 3.1和Entity Framework Core会根据ID从数据库中删除多个记录

来自分类Dev

可以在单个TransactionScope内使用多个Entity Framework数据上下文吗?

来自分类Dev

可以在单个TransactionScope中使用多个Entity Framework数据上下文吗?

来自分类Dev

共享数据上下文/注入依赖项Entity Framework 6代码优先

来自分类Dev

在Entity Framework 6.0中从数据库更新模型

来自分类Dev

Entity Framework Core 无法在 android 三星设备上创建数据库文件

来自分类Dev

使用 Entity Framework Core、npgsql、PostgreSQL 创建新数据库

来自分类Dev

没有使用Entity Framework Core 3.1在MySql数据库中创建User表(代码优先方法)

来自分类Dev

无效的列名Entity Framework Core

来自分类Dev

在Entity Framework 6中使用来自多个线程的单个上下文

来自分类Dev

如何使用Entity Framework Code First和DDD创建数据库?

Related 相关文章

  1. 1

    将对象列表添加到Entity Framework中的数据库上下文

  2. 2

    每次Entity Framework数据库迁移后如何访问上下文

  3. 3

    在Entity Framework中使用DbSet而不是IDbSet模拟数据库上下文类

  4. 4

    227个Mapped类的子类型导致慢速Entity Framework数据库上下文初始化?

  5. 5

    从Postgres数据库为Entity Framework Core创建类

  6. 6

    如何使用Entity Framework以可编辑的DataGridView和上下文跟踪更改的方式筛选数据?

  7. 7

    将 DbContext.SaveChanges 异常记录到 Entity Framework/Entity Framework Core 中的数据库

  8. 8

    我的上下文未从Entity Framework Core中的DbContext继承

  9. 9

    在Entity Framework Core中为所有数据库创建和应用迁移

  10. 10

    在Entity Framework Core中为所有数据库创建和应用迁移

  11. 11

    Entity Framework Core 不在我的数据库中创建表

  12. 12

    使用多个Entity Framework上下文并行查询

  13. 13

    尝试模拟Entity Framework上下文时抛出TargetInvocationException

  14. 14

    无法使用Entity Framework Core 3.1.3更新数据库

  15. 15

    无法使用Entity Framework Core更新数据库

  16. 16

    Entity Framework Core 中的 SqlGeometry

  17. 17

    来自WCF数据服务的Entity Framework 6数据上下文

  18. 18

    Entity Framework Core 腳手架附加表而不是上下文

  19. 19

    ASP.NET Core 3.1和Entity Framework Core会根据ID从数据库中删除多个记录

  20. 20

    可以在单个TransactionScope内使用多个Entity Framework数据上下文吗?

  21. 21

    可以在单个TransactionScope中使用多个Entity Framework数据上下文吗?

  22. 22

    共享数据上下文/注入依赖项Entity Framework 6代码优先

  23. 23

    在Entity Framework 6.0中从数据库更新模型

  24. 24

    Entity Framework Core 无法在 android 三星设备上创建数据库文件

  25. 25

    使用 Entity Framework Core、npgsql、PostgreSQL 创建新数据库

  26. 26

    没有使用Entity Framework Core 3.1在MySql数据库中创建User表(代码优先方法)

  27. 27

    无效的列名Entity Framework Core

  28. 28

    在Entity Framework 6中使用来自多个线程的单个上下文

  29. 29

    如何使用Entity Framework Code First和DDD创建数据库?

热门标签

归档