Update-Database
最近、Entity Frameworkの移行を使用し始めましたが、コマンドを実行したときにデータベース名がプルスルーされないことに気付きました。
私の接続文字列は次のとおりです。
<connectionStrings>
<add name="DataContext" connectionString="Server=.\SQLEXPRESS;Initial Catalog=TestDB;Trusted_Connection=Yes;" providerName="System.Data.SqlClient" />
</connectionStrings>
Update-Databaseを初めて実行すると、データベースは正しい名前TestDBで作成されます。ただし、エンティティの1つに変更を加えるとすぐに、スタートアッププロジェクト名を追加しない限り更新されなくなります(マルチプロジェクトソリューションを使用しています)。
Update-Database -StartUpProjectName "TestDB.Data"
これにより、移行で常に使用され続ける別の新しいデータベースが作成されます。StartUpProjectNameコマンドを入力する必要はありませんが、これによって生成されるデータベースのデフォルト名を上書きする方法はありますか?常にデータベースを次のように作成します
TestDB.Data.DataContext
StartUpProject名を渡すときに作成されたデータベースが単にTestDBと呼ばれるようにする方法はありますか、それともこれはStartUpProjectName設定の使用の制限ですか?
注として、StartUpProjectNameを指定する必要があるのは、多層プロジェクトをセットアップしているためだと思います。移行構成ファイルは「データ」プロジェクトにあり、エンティティ/モデルは「ドメイン」プロジェクトにあります。また、以前使用していたように、Global.asax.csファイルには現在初期化オプションがありません。最初のef4.2をコーディングします。したがって、私のプロジェクトでは、データプロジェクトにDataContextがあり、そのプロジェクトにも移行構成があります。
編集:
私は最初にこの質問を設定して以来、マルチプロジェクトソリューションでデータベースに名前を付ける「正しい」方法に出くわしました。以下の答えは機能しますが、理想的なソリューションではない別の領域でweb.configを複製していることを意味します。代わりに、次のようにして名前をDbContextに入れることができます(DataContextは、プロジェクトで使用した名前です)。
public class DataContext : DbContext
{
public DataContext() : base("DatabaseNameHere")
{ }
public DbSet<Table1> Table1 { get; set; }
public DbSet<Table2> Table2 { get; set; }
public virtual void Commit()
{
base.SaveChanges();
}
}
ありがとう、
リッチ