0

DataBaseFirst メソッドに基づいてモデルを生成すると、基本的に DB テーブルにマップされるエンティティのコレクションが ORM に生成されるという事実を理解しています。

他のエンティティまたはドロップダウン リスト フィールドのプロパティが必要な場合は、ViewModel を作成し、そのクラスをモデルとして使用できることを理解しています。

私はちょうど終了したばかりの AppDev コースを持っており、著者は、私がそれを正しく理解していれば、ViewModel がどのように見えるかに合わせて ORM エンティティを変更することに言及しているため、ViewModel は必要ないと書いています。ただし、これを実行してデータベースから ORM を再生成すると、「ViewModels」として配置した新しいエンティティは失われます。データベースを更新するために ORM を変更した場合、SQL Server のデータベース構造は「元に戻されます」。

別のフォルダーに ViewModel を使用して、スーパークラスまたは必要なプロパティを持つ単一のクラスの特定のクラスやプロパティを収集し、それをモデルとして使用する必要があるという私の理解が正しいかどうかをお知らせください... .

作成者からの抜粋を次に示します。EntityFramework は、最初はクラスからテーブルへの 1 対 1 のマッピングですが、データがリレーショナル テーブルにどのように格納されていても、アプリケーション内のエンティティをより適切に表すモデルを作成できます。

4

1 に答える 1

1

著者が示唆していると思われるのは、複雑なモデルの概念です。たとえば、データベースにCustomerテーブルとテーブルがあるとしますAddress。1 対 1 のマッピングでは、1 つのCustomerクラスと 1つのクラスの 2 つのモデル アイテムが作成されますAddress。複雑なモデル マッピングを使用すると、代わりにテーブルとテーブルのCustomer両方の列を含む単一のクラスを作成できます。したがって、代わりに単に を参照できます。これは、ストレージ内の結果データとは異なる方法でコード内の概念モデルを表現できる多くのケースの 1 つにすぎません。優れたブログ シリーズInheritance with EF CodeFirst をご覧ください。CustomerAddressCustomer.Address.Street1Customer.Street1Table Per Hierarchy (TPH)、Table Per Type (TPT)、Table Per Concrete Class (TPC) などのさまざまなマッピング戦略の例。これらの例は CodeFirst ですが、最初のモデルがデータベースから生成された場合でも、Entity Framework に適用されることに注意してください。

一般に、DatabaseFirst を使用して結果のエンティティを変更しない場合、データベース内の各テーブルのコードには常にクラスが含まれます。しかし、Enity Framework の威力は、これらのハイブリッド マッピングを許可することで、エンティティをより効率的に操作できることです。したがって、クラスが厳密な SQL の期待に従わなければならないという余分な負担を負うことなく、コードについて自由に考えることができます。

編集

Database-First または Model-First エンティティが生成されるとき、それらは意図的に部分クラスとして生成されます。既存のクラス ファイルを変更せずに、Entity Framework から生成されたクラスを拡張する独自のパーシャルを作成できます。モデルが再生成されても、部分クラスはそのまま残ります。確かに、パーシャルを使用するということは、Entity Framework の既定の動作と拡張された動作があることを意味しますが、これは通常、大きな問題ではありません。

もう 1 つのオプションは、Entity Framework がモデルの生成に使用する TT ファイルを変更して、モデルが常に同じ状態で再生成されるようにすることです。

最終的には、Entity Framework の既定の動作がデータベースをクラス 1:1 にマップすることであるという理由だけで、他のオプションがあり、プロジェクトにとって効率的でないことを強制されることは決してないというのが主な考え方です。

于 2013-09-27T22:04:52.743 に答える