パッケージマネージャーコンソールからデータベースを更新しようとしています。ドメインクラスが変更された場合、データベースを削除するのではなく、データベースを削除して作成する必要があります。
私はすでにグーグルでいくつかのブログを読んでみました。
PM> Install-Package EntityFramework
このコマンドを使用して、Entity Frameworkを正常にインストールします。
PM> Enable-Migrations
このコマンドを使用して、プロジェクトに移行ファイルを作成しました。
PM> Update-Database
このコマンドを使用すると、テーブルを更新できますが、問題はこちらになります。
「-Verbose」フラグを指定して、ターゲットデータベースに適用されているSQLステートメントを表示します。 System.Data.SqlClient.SqlException(0x80131904):SQL Serverへの接続の確立中にネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからなかったか、アクセスできませんでした。インスタンス名が正しいこと、およびSQL Serverがリモート接続を許可するように構成されていることを確認してください。
[〜#〜] poco [〜#〜] Classで1つのフィールドのみが変更されると、更新される場合があります。たとえば、ドメインクラスの数を更新しました。パッケージマネージャーコンソールからデータベースを更新するにはどうすればよいですか。何か案が ?
接続文字列は、ConnectionString
パラメーターを介して指定できます。
Update-Database -ConnectionString "data source=server_name;initial catalog=db_name;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" -ConnectionProviderName "System.Data.SqlClient" -Verbose
また、Add-Migration
コマンドと同じ値でこのパラメーターを使用する必要があります。
Add-Migration Version_Name -ConnectionString "data source=server_name;initial catalog=db_name;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" -ConnectionProviderName "System.Data.SqlClient" -Verbose
私は使った
Enable-Migrations -EnableAutomaticMigrations -Force
それから
Update-Database
そして、これにより、テストデータを保持しながら、変更(追加の列)が移行されました。これがプロトタイピング中の最も遅延なオプションだと思います。
複数の問題があるようです。データベースを削除して再作成したくないことに関しては、データベース初期化子によって決定されます。移行を使用する場合は、MigrateDatabaseToLatestVersionに変更します。 http://www.codeguru.com/csharp/article.php/c19999/Understanding-Database-Initializers-in-Entity-Framework-Code-First.htm
2番目に、変更するフィールドの数は問題ではなく、最後の移行からの変更に基づいて単一の移行にロールされます。
第三に、他の人が指摘したように、接続文字列の問題があるようです。これをAdd-MigrationおよびUpdate-Migrationに追加できますが、おそらくアプリケーションで修正します。構成ファイル(ASP.NETのweb.config)を指すコンテキストのコンストラクターに私のものを設定します。
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext()
: base("MyConnection", throwIfV1Schema: false)
{
Database.SetInitializer<ApplicationDbContext>(new MigrateDatabaseToLatestVersion<ApplicationDbContext, MyObjextContextMigration>());
}
...
接続文字列をどこに配置しますか?
パッケージマネージャーコンソールのすべてのコマンドで指定する必要はありません。 DbContextクラス(「from DbContext派生クラス」)が存在するプロジェクトのappsettings.jsonに配置できます。
{
"ConnectionStrings": {
"MyConnectionString": "Server=yourServer;Port=5432;Database=yourDatabase;User Id=yourDatabaseUsername;Password=yourDatabasePassword;"
}
}
移行に使用されます。
重要:ソリューションに複数のプロジェクトがある場合、必須「デフォルトプロジェクト」-ドロップダウン(パッケージマネージャーコンソール内)でプロジェクトを選択し、必須を設定しますプロジェクトをスタートアッププロジェクトとして(ソリューションエクスプローラーで)。
そうしないと、誤った/異なる接続文字列で誤ったappsettings.jsonが使用される可能性があります。
これはEF Core 2.1での私の経験であり、おそらくEFの他のバージョンにも当てはまります。
SSDTを更新する必要があります。ツール>拡張機能と更新>更新> SQLサーバーデータツールに移動します