gpt4 book ai didi

c# - 动态设置 EF 6 连接字符串

转载 作者:行者123 更新时间:2023-11-30 17:01:10 30 4
gpt4 key购买 nike

我看过很多关于此的帖子,但我不明白如何实现它。

我的连接字符串在 app.config 中指定为“MealsContext”,我的 EF 数据模型容器名称是“MealsContext”,我如何使用 MealsContext 的实例但定义要在运行时使用的连接字符串?如果我创建一个新的 EntityConnection,它不知道模型中有哪些实体对象,例如这就是我目前正在做的...

    private MealsContext context = new MealsContext();

public void InsertOrUpdate(Meal _entity)
{
context.Entry(_entity).State = _entity.Id == default(int) ? EntityState.Added : EntityState.Modified;
context.SaveChanges();
}

最佳答案

EF 6 的数据库上下文基类 DbContext 有几个重载 - 其中一个采用 DbConnection 和一个 bool 标志,指示前面提到的 DbConnection 对象应在处理上下文时处理(IOW 如果为真,则在处理上下文时处理 DbConnection)。您还可以使用仅采用连接字符串的构造函数重载,但我想举一个示例来说明如何在控制 DbConnection 对象的生命周期的同时执行此操作。

问题是,当您的特定上下文生成时,默认情况下只有默认(公共(public)/无参数)构造函数可用,如果您查看生成的类,这暗示使用基于配置文件的 EF 连接字符串条目。好消息是,您生成的继承自 DbContext 的上下文遵循使用 partial 修饰符生成上下文类的最佳实践,这允许您创建自己的 partial 实现您特定模型的上下文。

我会建议在您的项目中创建一个新的类文件(明确地不是代码生成的文件),并且至少使用一个构造函数对您的模型的上下文类进行 partial 实现,该构造函数具有一个 DbConnection 和一个 bool 参数来镜像上述 DbContext 构造函数签名。

例如,如果生成的上下文定义为:

public partial class MyModelContainer : DbContext...

然后您可以创建您的部分类实现(当然是在您 Shiny 的、新的和单独的类文件中):

public partial class MyModelContainer
{
public MyModelContainer(DbConnection dbConnection, bool contextOwnsConnection)
: base(dbConnection, contextOwnsConnection)
{
// you can other stuff here if you need to, but don't have to for this example
}
}

如果您已经做到这一点,您应该能够创建具有数据库连接的 MyModelContainer 对象,该对象与您提供的 DbConnection 对象使用的连接字符串一样动态。

例子:

public void DynamicConnectionExample(string entityConnectionString)
{
DbConnection dbConnection = new EntityConnection(entityConnectionString);
bool shouldImplicitlyDisposeOfConnection = true;
using (var ctx = new MyModelContext(dbConnection, shouldImplicitlyDisposeOfConnection))
{
// do stuff...
}
}

显然,您可以通过配置 DbConnection 对象的连接字符串的方式获得一点创意,我建议您探索示例中显示的方式以外的其他方式。

还值得注意:根据您使用的是模型优先还是代码优先,这会对您将使用的 DbConnection 的特殊类型产生影响。例如,如果您使用 EF 模型,您将使用 EntityConnection 对象,因为需要访问程序集中的元数据编译资源。

引用:http://msdn.microsoft.com/en-us/library/gg696604(v=vs.113).aspx

关于c# - 动态设置 EF 6 连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21307461/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com