我在Azure中创建了一个数据库,设置了我自己的自定义名称。然后,我创建了EF 5代码第一个实体并添加了迁移。在应用程序启动时,我调用了这两行:
Database.DefaultConnectionFactory = new SqlConnectionFactory(connectionString);
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDataContext, MyConfiguration>());
连接字符串直接来自Azure: Server = tcp:xxx.database.windows.net,1433; Database = dbName; User ID = yyy; Password = zzz; Trusted_Connection = False; Encrypt = True; Connection Timeout = 30;
在第一次调用时,我希望数据库dbName根据POCO模式填充表。 但是,使用我的上下文的完整命名空间名称生成一个NEW数据库: MyService.Business.Entity.MyContext
为什么迁移不接受连接字符串中指定的数据库名称?
答案 0 :(得分:1)
我的经验是,在连接字符串在代码中传递而不是从app.config获取的情况下,EF对于如何获取连接字符串很古怪。
我必须添加一个继承自IDBContectFactory
的类 public class ContextFactory : IDbContextFactory<Context>
{
public Context Create()
{
var s = (string)AppDomain.CurrentDomain.GetData("ConnectionString");
var context = new Context(s);
return context;
}
}
另外,为了创建迁移,我在上下文类
中需要以下内容// uncomment when creating migration - comment out after migration is created
public Context() : base("ConnectionStringName"){}
在我的app.config中设置了ConnectionStringName。
我仍然感到神秘,我不得不这样做,并询问了它here
答案 1 :(得分:1)
您可以在DbContext的构造函数中指定数据库名称或连接字符串名称:
public class MyDataContext : DbContext
{
public MyDataContext: base("DbNameOrConntectionStringNameHere")
{
}
}