EF 5 + Azure + MigrationFirst overrides database name. Why?

三世轮回 提交于 2019-12-11 13:18:24

问题


I created a database in Azure setting my own custom name. I then created EF 5 code first entities and added migrations. On application startup I called these two lines:

        Database.DefaultConnectionFactory = new SqlConnectionFactory(connectionString);
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDataContext, MyConfiguration>());

Connection string is taken straight from Azure: Server=tcp:xxx.database.windows.net,1433;Database=dbName;User ID=yyy;Password=zzz;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;

On fist call I expected database dbName to be filled with tables according to POCO schema. But instead a NEW database is generated with the complete namespace name of my context: MyService.Business.Entity.MyContext

Why will the migration not accept the database name specified in the connection string?


回答1:


You can specify the Database name or connection string name in the constructor of your DbContext:

public class MyDataContext : DbContext
{
    public MyDataContext: base("DbNameOrConntectionStringNameHere")
    {
    }
}



回答2:


My experience is that, in the case where the connection string is being passed in code, rather than obtained from app.config, EF is quirky about how it obtains the connection string.

I had to add a class that inherited from IDBContectFactory

  public class ContextFactory : IDbContextFactory<Context>
  {
    public Context Create()
    {
        var s = (string)AppDomain.CurrentDomain.GetData("ConnectionString");
        var context = new Context(s);

        return context;
    }
}

Also, in order to create a migration, I needed the following in my context class

// uncomment when creating migration - comment out after migration is created
public Context() : base("ConnectionStringName"){}

Where the ConnectionStringName is set up in my app.config.

I am still mystified that I had to do this and have asked about it here



来源:https://stackoverflow.com/questions/15888150/ef-5-azure-migrationfirst-overrides-database-name-why

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!