如何在实体框架中更改数据库名称
Posted
技术标签:
【中文标题】如何在实体框架中更改数据库名称【英文标题】:How to change the database name in Entity Framework 【发布时间】:2018-02-20 06:20:37 【问题描述】:我正在尝试找到一种方法来更改我的web.config
和我的上下文中的数据库名称。除了数据库名称之外,我的连接字符串中没有其他信息发生变化。
public APIContext(string dbname = "MyFirstDB") : base("OriginalContext")
this.Database.Connection.ConnectionString = this.Database.Connection.ConnectionString.Replace("MyFirstDB", dbname);
我能找到实现这一点的唯一方法是替换名称,但我可以看到未来很少有问题,例如如果我需要返回或需要指向另一个数据库。使用 mysql。
任何帮助将不胜感激。
** 编辑 **
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class APIContext : DbContext
public APIContext() : base("MyContext")
public void setDatabaseName(string name)
var currentdatabase = this.Database.Connection.Database;
this.Database.Connection.ConnectionString = this.Database.Connection.ConnectionString.Replace(currentdatabase, name);
如果我在调用上下文类之前调用“setDatabaseName(string name)”方法会起作用吗?
我只是对应该在哪里替换数据库名称以及如何替换感到困惑。
【问题讨论】:
这行得通你为什么不试试看它是否行得通?我的意思是先尝试然后在这里询问并等待答案会更快。为什么不能只更改配置文件中连接字符串中的数据库名称:Database=whateverDb
?
我试过这个耀西。我感到困惑的是如何设置它以及我需要在连接字符串中更改数据库名称的地方。在我访问了我的初始数据库后,我得到了一个数据库名称,并想切换到该数据库。我不知道该怎么做。
见this answer
正是我想要的。谢谢耀西。
【参考方案1】:
你试过了吗?
public partial class MyModel : DbContext
public MyModel()
: base("name=MyModelDataContext") // <-- ConnString Name
你的 connstring 看起来像这样
<add name="MyModelDataContext" connectionString="data source=... initial catalog=YOURDB
这样您就可以随时更改数据库名称。
这实际上是代码首先从数据库向导生成它的方式
【讨论】:
谢谢维克多,但这就是我困惑的地方。我该如何更改数据库名称? 好的,这里硬编码的是 connstring 名称,数据库名称在 web.config 中,在我的示例代码中它是 Initial Catalog = YOURDBNAME 由于 web.config 可以随时编辑,这意味着您的数据库名称可以随时更改。 再次感谢维克多。但是,更改 dbname 时我最好的选择是什么?我将 web.config 切换为使用“初始目录 =”而不是“数据库 =”。如何在不使用替换的情况下更改该数据库名称? 好的,在你的情况下是的,因为你使用 MySql,你必须使用这种连接字符串 Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword; 和只需替换myDataBase,就是这样,这是dbname 应该在的唯一位置。 我已经编辑了上面的 Context 类,但我仍然觉得我走错了路。【参考方案2】:好的,如果你想使用多个 connstring,你可以这样做
public class MyModel : DbContext
public MyModel ()
: base(ApplicationParameters.ConnectionStringName)
public MyModel (string connectionStringName)
: base(connectionStringName)
然后在您的 web.config 中,您可以设置一个连接字符串列表,并且在您的代码中,您可以使用第二个构造函数调用它们中的任何一个。
【讨论】:
以上是关于如何在实体框架中更改数据库名称的主要内容,如果未能解决你的问题,请参考以下文章