对于每个调用,在运行时将连接字符串传递给Entity Framework

InTheWorldOfCodingApplications

我的实体框架上下文如下

 public partial class MyContext : DbContext, IMyContext
{
    static MyContext()
    {
        System.Data.Entity.Database.SetInitializer<MyContext>(null);
    }

    public MyContext()
        : base("Name=MyContext")
    {
    }

我通过以下方式通过autofac解决它

builder.RegisterType(typeof(MainContext)).As(typeof(DbContext)).InstancePerLifetimeScope();
        builder.RegisterType<MainContext>().As<IMainContext>().InstancePerRequest();

此数据库上下文在存储库层中被调用

#region Fields

    private readonly IMyContext _context;

    #endregion

    #region Constructors and Destructors

    public EmployeeRepository(IMyContext context)
    {
        _context = context;
    }

    #endregion

    public void Create(Employee emp)
    {
        this._context.Employee.Add(emp);
    }

现在我的问题是,我想为每个调用动态设置连接字符串。连接字符串将通过我要传递到此上下文的webapi传递。谁能帮助我该怎么做?我对这里的autofac感到困惑。其次,我如何确保每个调用都设置了连接字符串并且不对其进行缓存。

西里尔·杜兰德

您可以使用工厂来构建上下文并为您设置连接字符串。

public interface IContextFactory
{
    IContext GetInstance();
}

public class MyContextFactory : IContextFactory 
{
    public IContext GetInstance()      
    {
        String connectionString = this.GetConnectionString(HttpContext.Current); 
        return new MyContext(connectionString); 
    }

    private String GetConnectionString(HttpContext context)
    {
        // do what you want
    }
}


builder.RegisterType<MyContextFactory>()
       .As<IContextFactory>()
       .InstancePerRequest(); 
builder.Register(c => c.Resolve<IContextFactory>().GetInstance())
       .As<IContext>()
       .InstancePerRequest(); 

如果无法基于HttpContext获取连接字符串,则可以在创建实例之前更改contextFactory实现以期望通过WebAPI进行初始化。例如 :

public interface IContextFactory
{
    IContext GetInstance();
    void Initialize(String connectionString);
}

public class MyContextFactory : IContextFactory 
{

    private String _connectionString; 

    public void Initialize(String connectionString)
    {
        this._connectionString = connectionString; 
    }

    public IContext GetInstance()      
    {
        if (this._connectionString == null)
        {
            throw new Exception("connectionString not initialized"); 
        }
        return new MyContext(this._connectionString); 
    }
}

在Web API调用开始时(例如,通过属性),您可以调用Initialize方法。因为工厂是InstancePerRequest您,所以请求期间将只有一个实例。


顺便说一句,我不确定是否了解此注册

builder.RegisterType(typeof(MainContext)).As(typeof(DbContext)).InstancePerLifetimeScope();
builder.RegisterType<MainContext>().As<IMainContext>().InstancePerRequest();

它看起来有问题,因为您将拥有2个相同类型的不同注册,而不是同一范围的注册,这是有目的的吗?此外,注册a听起来不是一个好主意DbContext,您需要此注册吗?

以下注册看起来更好:

builder.RegisterType<MainContext>()
       .As<IMainContext>()
       .As<DbContext>()
       .InstancePerRequest();

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将连接字符串传递给Entity Framework 6

来自分类Dev

如何使用Entity Framework 6在运行时创建数据库和表?

来自分类Dev

将查询字符串参数传递给直达线通道 Bot Framework

来自分类Dev

Entity Framework连接字符串的异常行为

来自分类Dev

Entity Framework连接字符串的异常行为

来自分类Dev

如何动态更改Entity Framework EDMX连接字符串

来自分类Dev

在运行时使用连接字符串

来自分类Dev

Dapper 在运行时更改连接字符串

来自分类Dev

在运行时播放Framework 2.3 jvm内存

来自分类Dev

有没有一种方法可以将字符串数组而不是单独的参数传递给Entity Framework类?

来自分类Dev

如何在运行时将java中的字符串参数作为参数传递

来自分类Dev

如何在运行时将java中的字符串参数作为参数传递

来自分类Dev

有什么方法可以在运行时使用Entity Framework Core(代码优先)将旧版本模型实例添加到数据库中吗?

来自分类Dev

如何在运行时将命令行参数(字符串数组类型)传递给 servlet init 方法

来自分类Dev

多个数据库,其模型稍有变化。如何允许Entity Framework在运行时删除列?

来自分类Dev

如何在运行时为LINQ和Entity Framework生成链接方法表达式?

来自分类Dev

如何在运行时创建表达式以在Entity Framework中与GroupBy()一起使用?

来自分类Dev

在运行时将变量传递给方法

来自分类Dev

为什么将C字符串作为char *传递给函数会导致运行时错误(但将定义为char []的C字符串传递是可以的)?

来自分类Dev

支持使用 Entity Framework 6.0 和连接字符串转换的多个数据库

来自分类Dev

如何在运行时更改NLog目标的连接字符串?

来自分类Dev

SQLite EF6在运行时以编程方式设置连接字符串

来自分类Dev

Azure Web服务-在运行时更改数据库连接字符串

来自分类Dev

实体框架-在运行时更改连接字符串(需要解释)

来自分类Dev

Castle和NLog在运行时更改连接字符串

来自分类Dev

在运行时更改连接字符串–这是正确的方法吗?

来自分类Dev

在EF 6中在运行时更改连接字符串

来自分类Dev

如何在运行时在EF7 Core中更改连接字符串?

来自分类Dev

Castle和NLog在运行时更改连接字符串

Related 相关文章

  1. 1

    将连接字符串传递给Entity Framework 6

  2. 2

    如何使用Entity Framework 6在运行时创建数据库和表?

  3. 3

    将查询字符串参数传递给直达线通道 Bot Framework

  4. 4

    Entity Framework连接字符串的异常行为

  5. 5

    Entity Framework连接字符串的异常行为

  6. 6

    如何动态更改Entity Framework EDMX连接字符串

  7. 7

    在运行时使用连接字符串

  8. 8

    Dapper 在运行时更改连接字符串

  9. 9

    在运行时播放Framework 2.3 jvm内存

  10. 10

    有没有一种方法可以将字符串数组而不是单独的参数传递给Entity Framework类?

  11. 11

    如何在运行时将java中的字符串参数作为参数传递

  12. 12

    如何在运行时将java中的字符串参数作为参数传递

  13. 13

    有什么方法可以在运行时使用Entity Framework Core(代码优先)将旧版本模型实例添加到数据库中吗?

  14. 14

    如何在运行时将命令行参数(字符串数组类型)传递给 servlet init 方法

  15. 15

    多个数据库,其模型稍有变化。如何允许Entity Framework在运行时删除列?

  16. 16

    如何在运行时为LINQ和Entity Framework生成链接方法表达式?

  17. 17

    如何在运行时创建表达式以在Entity Framework中与GroupBy()一起使用?

  18. 18

    在运行时将变量传递给方法

  19. 19

    为什么将C字符串作为char *传递给函数会导致运行时错误(但将定义为char []的C字符串传递是可以的)?

  20. 20

    支持使用 Entity Framework 6.0 和连接字符串转换的多个数据库

  21. 21

    如何在运行时更改NLog目标的连接字符串?

  22. 22

    SQLite EF6在运行时以编程方式设置连接字符串

  23. 23

    Azure Web服务-在运行时更改数据库连接字符串

  24. 24

    实体框架-在运行时更改连接字符串(需要解释)

  25. 25

    Castle和NLog在运行时更改连接字符串

  26. 26

    在运行时更改连接字符串–这是正确的方法吗?

  27. 27

    在EF 6中在运行时更改连接字符串

  28. 28

    如何在运行时在EF7 Core中更改连接字符串?

  29. 29

    Castle和NLog在运行时更改连接字符串

热门标签

归档