すべてのデータベースオブジェクトの定義を含むDBContextオブジェクトがあります。アプリケーションを初めて実行したときに、データベースが作成されました。これは現在生産中です。コードの最初の移行で既存のデータベースが見つかりません
私はDEVでモデルの変更を行う必要がありましたので、リリース時に必要なスキーマの変更を行うSQLスクリプトを生成するためにコードファーストマイグレーションを使用する必要があります。
私が理解しているように、add-migrationコマンドで新しい移行を追加することができました。既存のデータベースとモデル定義を比較し、データベースを更新できるスクリプトを生成します。しかし、私がadd-migrationコマンドを実行すると、単に新しいオブジェクトではなく、完全なデータベース作成であるマイグレーションが生成されます。
私のデータベースオブジェクトは別のクラスライブラリにあり、私はパッケージマネージャコンソールを開き、デフォルトのプロジェクトを自分のDBクラスライブラリに選択しました。私は
internal sealed class Configuration : DbMigrationsConfiguration<Centrica.EMT.Database.Context.EmtDataContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
ContextKey = "Centrica.EMT.Database.Context.EmtDataContext";
}
を持っており、そのクラスライブラリのapp.configをして、私は
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<connectionStrings>
<add name="Centrica.EMT.Database.Context.EMTDataContext" connectionString="Initial Catalog=EMTProd;Data Source=WYCVWWEBD016\COMPUTECLUSTER;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
を持って、まだそのデータベースを見つけるように見えると、更新を生成しません
の下Configuration.cs新しい移行を作成するときには、新しい完全データベース作成スクリプトを作成するだけです。
更新スクリプトを作成できませんでしたか?既存の移行を最初にベースラインとして実行する必要がありましたか?既存のデータベースを見つける方法を間違って設定しましたか?
更新
public class EmtDataContext : DbContext
{
public EmtDataContext()
{
//todoSystem.Data.Entity.Database.SetInitializer(new CreateDatabaseIfNotExists<EmtDataContext>());
var objectContextAdapter = this as IObjectContextAdapter;
var objectContext = objectContextAdapter.ObjectContext;
objectContext.CommandTimeout = Database.Connection.ConnectionTimeout;
}
ここでは少し誤解があると思います。最初に移行を有効にすると、最初の移行スクリプトは実際にはテーブル作成でいっぱいです。 後で何かを修正して追加マイグレーションを実行した後でなければ、デルタを説明する別のマイグレーション・スクリプトがあります。私は同様のセットアップがあり、実際にはCreateTable()の完全なです _InitialCreate.csというファイルがあります –
ああ私が参照してください。私はアプリケーションを実行し、InitializerをCreateDatabaseIfNotExistsに設定しました。私は既存のものを作成しなかったので、今私は移行を使用することができますか? – NZJames
はい。 MigrateDatabaseToLatestVersionを使用することができます。これは、本番環境で実行する必要があります –