1

独自のカスタム名を設定して、Azure でデータベースを作成しました。次に、EF 5 コード ファースト エンティティを作成し、移行を追加しました。アプリケーションの起動時に、次の 2 行を呼び出しました。

        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

DbContext のコンストラクターでデータベース名または接続文字列名を指定できます。

public class MyDataContext : DbContext
{
    public MyDataContext: base("DbNameOrConntectionStringNameHere")
    {
    }
}
于 2013-04-09T00:09:17.153 に答える
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 が設定されている場所。

私はこれをしなければならなかったことをまだ当惑しており、ここでそれについて尋ねました

于 2013-04-08T20:41:16.983 に答える