質問: 移行でEF6を使用する場合は、ビューにマップする必要があります。 ビューは他の2つのテーブルをピボットして、基礎となるデータの簡単な要約ビューを有効にします。これは、サマリー・インデックス・ビューでこれを使用できるという考え方です。 私が持っている問題は、ビューを配置する(理想的な目標)、または後で手動で展開するためにビューを使わずにDBを展開する移行を作成できないことです。 ほとんどの試みでは、他のSOの質問以下は、私はデッドロックのどちらかに終わる`Add-Migration`および`Update-Database`コマンドを、または、一般的に、1つまたは他を壊すエラーを引き起こし。 ビューにアクセスするためにEF6を使用する現在の最良の方法は、マイグレーションでそれらを自動的にデプロイする機能を失っても、マイグレーションでエラーが発生することはありません。 ### 詳細 Dbには、2つのテーブルReportsとReportAnswersが含まれています。 ReportViewビューはこれらの2つを結合し、ReportAnswersをピボットして、このサマリービューの一部の行を列にすることを許可します。 レポートとReportAnswersはEFの移行によって削除されました。ビューは現在、何らかの形で展開に追加する必要があるスクリプトです。 レポート、ReportAnswersおよびReportViewはdbコンテキストからアクセスできます ``` public virtual DbSet ReportAnswers { get; set; } public virtual DbSet Reports { get; set; } public virtual DbSet ReportView { get; set; } ``` `Add-Migration Name -IgnoreChanges`を使用して空の移行を作成し、 `Up()`および`Down()`メソッドに手動でビューを`Add-Migration Name -IgnoreChanges`しようとしましたが、それぞれが最初に実行したい移行および更新コマンドをデッドロックします。 私はまた、 `modelBuilder.Ignore();`を使って`modelBuilder.Ignore();`移行を実行しているときにタイプを無視することができましたが、これは少なくとも1回はうまくいくように見えましたが、これは非常にエラーが発生しやすいことが判明しました。
回答: 数日前にEF Coreでビューを使用することについての興味深い記事を歩いただけですが、EF 6を使用しても同じことが分かりました。 あなたは使用することをお勧めします`Seed`法の代わりに移行`Up`と`Down`方法を。 ``` protected override void Seed({DbContextType} context) { string codeBase = Assembly.GetExecutingAssembly().CodeBase; UriBuilder uri = new UriBuilder(codeBase); string path = Uri.UnescapeDataString(uri.Path); var baseDir = Path.GetDirectoryName(path) + "\\Migrations\\{CreateViewSQLScriptFilename}.sql"; context.Database.ExecuteSqlCommand(File.ReadAllText(baseDir)); } ``` あなたのSQLコマンドは以下のサンプルのようになります。 ``` IF NOT EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[{ViewName}]')) EXEC dbo.sp_executesql @statement = N'CREATE VIEW [dbo].[{ViewName}] AS SELECT {SelectCommand} ``` 完璧ではありませんが、少なくとも参考になることを願っています。 私はこのトピックに関する別のブログ記事を見つけました。作者は`Up`メソッドと`Sql(@"DROP VIEW dbo.{ViewName};")` `Sql(@"CREATE VIEW dbo.{ViewName} AS...")` `Down`メソッド。 `Up` and `Down`移行方法のコードを提供していないので追加しました。おそらく、Sqlメソッドの代わりにSqlFileを追加することをお勧めします。 カスタマイズされたコードやSQLジェネレータを作成してマイグレーションにプラグインするオプションもありますが、探しているものではないと思います。 追加のヘルプが必要な場合は、コメントでお知らせください。 関連リンク: エンティティフレームワークコードでのビューの使用 EFコードの最初のビューと保存されたプロシージャ Entity Frameworkのビューの活用 DbMigration.Sqlメソッド(String、Boolean、â€、Object).aspx#M:System.Data.Entity.Migrations.DbMigration.Sql(System.String,System.Boolean,System.Object)) DbMigration.SqlFileメソッド(文字列、ブール型、â€、オブジェクト).aspx#M:System.Data.Entity.Migrations.DbMigration.SqlFile(System.String,System.Boolean,System.Object))