Entity Framework を使用している人はいますか?
-
09-06-2019 - |
質問
データストア内のテーブルとはまったく異なる概念クラスへの O/R マッピングを行う Entity Framework プロジェクトを実際に出荷した人はいますか?
つまり、ジャンクション (M:M) テーブルを他のエンティティに折りたたんで形成するということです。 概念的な ビジネスドメイン内に存在するが、次のように編成されるクラス 複数のテーブル データストア内。MSDN で見られるすべての例では、継承がほとんど使用されておらず、ジャンクション テーブルを他のエンティティに折りたたんだり、ルックアップ テーブルをエンティティに折りたたんだりしています。
ビジネス オブジェクトに対して通常実行されると思われるすべての CRUD 操作をサポートする以下の例について聞いたり、見たりしたいと思っています。
車両テーブルとカラーテーブル。色は多くの車両 (1:M) に表示されます。これらは、Color プロパティを持つ概念クラス UsedCar を形成します。
Doctor、DoctorPatients、および Patients テーブル (多対多を形成)。医師には多くの患者がおり、患者には複数の医師がいる可能性があります (M:M)。Doctor (患者コレクションを持つ) と患者 (医師コレクションを持つ) の 2 つの概念クラスを計画します。
Entity Framework の CSDL と SSDL でこれを見た/実行した人はいますか?CSDL は、実際に何にもマッピングされていない場合は役に立ちません。
解決
それがどのようなものかを確認するために、既存のプロジェクト (約 60 テーブル、3 継承あり) で Entity Framework を使用しようとしました。私の経験を要約すると次のとおりです。
デザイナーの表面はぎこちないです。マッピングは直感的ではないため、複数のツール ウィンドウを同時に開いても問題ないと誰かが考えたに違いありません。手動でオブジェクトを作成し、適切なフィールドをマップするには長い時間がかかりましたが、コードからオブジェクトを操作するのは依然として奇妙でした。データベース通信を扱うものは必須ですが、 EF に制御を渡すことは、手動で行うよりもはるかに激しい戦いだったと感じます.
Visual Studio を再起動するまでデザイナーが読み込まれない場合があります。単なるバグだと思いますが、VS を再起動するのは面倒です。
すべての作業は 1 つのファイルにまとめられるため、複数の開発者エディションをマージすることは望ましくありません。
結果の SQL (プロファイラー経由で監視) はあまり良好ではありませんでした。その理由については詳しく調べませんでしたが、最初の試みでは、さらにひどいものを書く必要があるでしょう。
他のヒント
私が言いたいのはそれだけです...
こう言う意味ですか?
<edmx:ConceptualModels>
<Schema xmlns="http://schemas.microsoft.com/ado/2006/04/edm" Namespace="Model1" Alias="Self">
<EntityContainer Name="Model1Container" >
<EntitySet Name="ColorSet" EntityType="Model1.Color" />
<EntitySet Name="DoctorSet" EntityType="Model1.Doctor" />
<EntitySet Name="PatientSet" EntityType="Model1.Patient" />
<EntitySet Name="UsedCarSet" EntityType="Model1.UsedCar" />
<AssociationSet Name="Vehicle_Color" Association="Model1.Vehicle_Color">
<End Role="Colors" EntitySet="ColorSet" />
<End Role="Vehicles" EntitySet="UsedCarSet" /></AssociationSet>
<AssociationSet Name="DoctorPatient" Association="Model1.DoctorPatient">
<End Role="Doctor" EntitySet="DoctorSet" />
<End Role="Patient" EntitySet="PatientSet" /></AssociationSet>
</EntityContainer>
<EntityType Name="Color">
<Key>
<PropertyRef Name="ColorID" /></Key>
<Property Name="ColorID" Type="Int32" Nullable="false" />
<NavigationProperty Name="Vehicles" Relationship="Model1.Vehicle_Color" FromRole="Colors" ToRole="Vehicles" /></EntityType>
<EntityType Name="Doctor">
<Key>
<PropertyRef Name="DoctorID" /></Key>
<Property Name="DoctorID" Type="Int32" Nullable="false" />
<NavigationProperty Name="Patients" Relationship="Model1.DoctorPatient" FromRole="Doctor" ToRole="Patient" /></EntityType>
<EntityType Name="Patient">
<Key>
<PropertyRef Name="PatientID" /></Key>
<Property Name="PatientID" Type="Int32" Nullable="false" />
<NavigationProperty Name="Doctors" Relationship="Model1.DoctorPatient" FromRole="Patient" ToRole="Doctor" />
</EntityType>
<EntityType Name="UsedCar">
<Key>
<PropertyRef Name="VehicleID" /></Key>
<Property Name="VehicleID" Type="Int32" Nullable="false" />
<NavigationProperty Name="Color" Relationship="Model1.Vehicle_Color" FromRole="Vehicles" ToRole="Colors" /></EntityType>
<Association Name="Vehicle_Color">
<End Type="Model1.Color" Role="Colors" Multiplicity="1" />
<End Type="Model1.UsedCar" Role="Vehicles" Multiplicity="*" /></Association>
<Association Name="DoctorPatient">
<End Type="Model1.Doctor" Role="Doctor" Multiplicity="*" />
<End Type="Model1.Patient" Role="Patient" Multiplicity="*" /></Association>
</Schema>
</edmx:ConceptualModels>