1

自動公開の前に正しいデータベース初期化子が設定されていることをテストできるように、現在のデータベース初期化子を取得するにはどうすればよいですか?

編集:チームメンバーが次のような行を削除するのを忘れたかどうかをテストするテストケースを作成したいと思います。

Database.SetInitializer<SomeModel>(new DropCreateDatabaseAlways<SomeModel>());

ただし、Database.GetInitializer()のようなメソッドやプロパティはありません。

現在のデータベース初期化子を取得する方法はありますか?

4

1 に答える 1

1

開発者が行をコミットするかしないかを覚えておくように頼っているのなら、あなたはこれを間違っていると思います。

web.configまたはapp.configで設定して、初期化をコードから切り離すことを検討する必要があります。app.configにweb.configトランスフォーメーションまたはSlowCheetahを使用すると、デバッグ、テスト、本番などの構成ごとにトランスフォーメーションが作成されます。

次に、Web.Debug.Configで、その構成に使用する初期化子を指定します。

  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <contexts>
      <context type="Company.Product.Infrastructure.BoundedContext, Company.Product.Infrastructure" disableDatabaseInitialization="false" xdt:Transform="Replace">
        <databaseInitializer type="Company.Product.Infrastructure.DatabaseInitializers.DebugDatabaseInitializer, Company.Product.Infrastructure" />
      </context>
    </contexts>
  </entityFramework>

他の構成の場合は、上記の構成のを置き換えて、//entityFramework/contexts/context/databaseInitializer/@type別のデータベース初期化子を使用します。これにより、デバッグにはDropCreateDatabaseAlwaysを使用し、テストにはDropCreateDatabaseIfModelChangesを使用し、本番環境の初期化を無効にすることができます。

テストとして、コードと.configの両方にデータベースの初期化を追加しようとしましたが、.configが優先されます。

于 2012-11-02T22:16:43.143 に答える