在我的应用程序中,我已经从现有数据库生成了EF模型。我的问题是,在我们的环境中,每个月都有一个单独的数据库,包含相同的表和结构。(例如Database_012018,Database_022018 ...等)。 是否可以使用相同的EF模型使用某个参数查询不同的月度底层数据库?
希望有一个解决方案,因为我刚接触EF,我不知道是否可以实现。感谢。
编辑:这是一个Windows窗体应用程序和EF 6。
This is my context class code which is generated automatically :
public partial class InSight_BNK_11802Entities1 : DbContext
{
public InSight_BNK_11802Entities1()
: base("name=InSight_BNK_11802Entities1")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
}
答案 0 :(得分:1)
正如@ChetanRanpariya建议的那样,假设如下:
每次查询initial catalog
时,您都可以使用不同的DbContext
传递连接字符串,例如:
string database = "Database_012018";
var cnnString = $"metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient;provider connection string=\"data source=.;initial catalog={database};integrated security=True\"";
using (var ctx = new BlogsEntities(cnnString))
{
ctx.Blogs.Where(...);
}
如果您使用自动生成的DbContext(在我的情况下为BlogsEntities
),您可能需要添加一个接受连接字符串的构造函数。您可以在另一个.cs文件中执行此操作,作为分部类,以避免触及自动生成的文件:
public partial class BlogsEntities : DbContext
{
public BlogsEntities(string cnnString)
: base(cnnString)
{
}
}
请注意,您的连接字符串必须包含元数据EDMX引用(在我的示例中,edmx文件称为Model.edmx
)。只需从配置中借用当前的连接字符串,然后更改initial catalog
值。