动态设置EF 6连接字符串

多贝斯塔

我已经看过很多关于此的文章,但我不知道如何实现。

我的连接字符串在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();
        }
Isandburn

EF 6的数据库上下文基类DbContext有两个重载-其中一个带有aDbConnection和一个布尔值标志,指示DbConnection在处置上下文时是否应处置前述对象(IOW如果为true,DbConnection则在上下文时处置)被处置)。您还可以使用仅接受连接字符串的构造函数重载,但是我想举一个示例,说明如何在控制DbConnection对象的生存时间的同时执行此操作

缺点是,在生成特定上下文时,默认情况下仅默认的(公共/无参数)构造函数可用,如果您查看生成的类,则暗示使用基于配置文件的EF连接字符串条目。好处是,您生成的上下文继承自DbContext以下最佳实践:使用partial修饰符生成上下文类,这使您可以创建自己partial的特定模型上下文的实现。

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

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

public partial class MyModelContainer : DbContext...

那么您可以创建部分类实现(当然,在您的闪亮,新的和单独的类文件中):

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将对要使用的特殊类型产生影响例如,EntityConnection如果您使用的是EF模型,则需要使用对象,因为需要访问程序集中的元数据编译资源。

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

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

动态设置EF 6连接字符串

来自分类Dev

Azure中的EF6连接字符串

来自分类Dev

web.config中的ASP.NET 5 / EF7连接字符串?

来自分类Dev

如何将EF6.1连接字符串从connectionStrings移至appSettings配置文件部分?

来自分类Dev

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

来自分类Dev

EF 6拦截器来设置连接字符串

来自分类Dev

EF代码优先的动态连接字符串

来自分类Dev

EF代码优先的动态连接字符串

来自分类Dev

实体框架6在代码中设置连接字符串

来自分类Dev

Swift 1.2连接字符串

来自分类Dev

Swift 1.2连接字符串

来自分类Dev

MVC 4连接字符串无法登录

来自分类Dev

如何动态设置模板字符串?

来自分类Dev

与Web Api的动态连接字符串

来自分类Dev

ssis动态连接字符串变量

来自分类Dev

动态建立连接字符串

来自分类Dev

ssis动态连接字符串变量

来自分类Dev

在ASP.NET 5 / EF 6中获取数据库连接字符串

来自分类Dev

EF 6未在Web.config中使用连接字符串

来自分类Dev

登录时使用EF6自定义连接字符串

来自分类Dev

带有自定义连接字符串的EF 6编程迁移

来自分类Dev

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

来自分类Dev

登录时使用EF6自定义连接字符串

来自分类Dev

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

来自分类Dev

使用 Prism 和不同模块时如何修改 EF6 的连接字符串

来自分类Dev

在Azure管理门户中进行设置时,无法使EF连接字符串正常工作?

来自分类Dev

EF6连接需要很长时间才能失败

来自分类Dev

实体框架6设置连接字符串运行时

来自分类Dev

WPF C#:如何设置SQL Server本地数据库的动态连接字符串