我是否需要为每个数据库使用DbContext?

时间:2013-08-04 07:40:08

标签: entity-framework dbcontext

一些背景知识:我们销售在线产品,每个客户都有自己的数据库,但正在使用共享服务。

我想使用EF6而不是旧的ADO.NET,但据我所知,在创建dbcontext时无法更改数据库,我担心为每个查询创建一个新的dbcontext太昂贵了。

缓存1000+ dbcontext听起来像是一个非常糟糕的解决方案。

4 个答案:

答案 0 :(得分:1)

这实际上很容易做到

public class MyContext : DbContext{
    public MyContext(string connectionStringName): base(connectionStringName){}
}

public class MyContext : DbContext{
    public MyContext(DbConnection connection): base(connection, contextOwnsConnection: true){}
}

答案 1 :(得分:1)

连接池不适用于1000多个连接字符串。每个数据库都有一个池,导致大量连接。

我建议您先连接到虚拟数据库,然后使用DbConnection.ChangeDatabase更改为正确的数据库。 EF没有注意到这一点并且工作正常。

您无需缓存DbContext。它们很轻巧。

答案 2 :(得分:0)

你不应该太担心DbContext的构建成本。在决定DbContext / ObjectContext的生命周期时还有其他因素需要考虑,您可以找到here

分享您的DbContext实例并不是一个好主意,主要是因为上面链接中提到的内存使用和线程安全。

答案 3 :(得分:0)

你可以做下一个:

public class BaseContext<TContext> : DbContext where TContext : DbContext
{
     protected BaseContext(): base("name=DbName")
     {
     }
}

这就像这样使用:

    public class StatusContext : BaseContext<StatusContext>
    {
         ....
    }

从BaseContext继承的所有上下文都将使用相同的db。

相关问题