1

我在 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 模式填充表。但是,使用我的上下文的完整命名空间名称生成了一个新数据库:MyService.Business.Entity.MyContext

为什么迁移不接受连接字符串中指定的数据库名称?

4

2 回答 2

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"){}

ConnectionStringName 在我的 app.config 中设置的位置。

我仍然很困惑我必须这样做并在这里询问过

于 2013-04-08T20:41:16.983 回答
1

您可以在 DbContext 的构造函数中指定数据库名称或连接字符串名称:

public class MyDataContext : DbContext
{
    public MyDataContext: base("DbNameOrConntectionStringNameHere")
    {
    }
}
于 2013-04-09T00:09:17.153 回答