データベースに「viewUsers」というビューがあり、他のエンティティ生成テーブルで操作する必要があります。このデータベース ビューをエンティティで取得するにはどうすればよいですか?
1 に答える
ウィザードで、[ビュー]を選択できます。EFが残りの面倒をみます。詳細な例 はこちら
編集:コメント(コードファーストでそれを行う方法)に従って、
Entity Framework 4.2の時点で、Codefirstにはテーブルのみのサポートが組み込まれています。つまり、テーブルを含むスキーマのみを生成できます。ただし、既存のデータベースを使用している場合は、更新可能なビューをエンティティにマップできます。エンティティフレームワークを使用して、データを選択、挿入、更新、および削除できます。これはテーブルと同じように機能します。SQL構文は、これらの操作のテーブルとビューで同じであるため、ビューがテーブルであるということを最初にコード化することに嘘をついています。
vwCustomerDetails
例:というエンティティに対して呼び出されたビューからデータを取得する場合は、CustomerDetail
データアノテーションを使用してこのようにすることができます
[Table("vwCustomerDetails")]
public class CustomerDetail
{
// properties
}
または、Fluent APIを使用すると、これを行うことができます。
modelBuilder.Entity<CustomerDetail>().ToTable("vwCustomerDetails");
通常のビューからのデータのロード
最初の偽のテーブル(ビュー)と同じ結果を返す別のビューからデータをロードしたい場合があります。例:一部のページでは、最高点を獲得した上位10のCustomerDetailsを表示する必要があります。そのために呼び出された別のビューがあると仮定vwTop10Customers
します。DBSetのSqlQueryメソッドを使用して、次のようなエントチューをロードできます。
var topCustomers=dbContext.CustomerDetails.SqlQuery("SELECT * FROM vwTop10Customers");
ビューは、エンティティとまったく同じ列名を返す必要があります。そうしないと、EFはそれをマッピングする際に問題が発生します。