12

データストア内のテーブルとはまったく異なる概念クラスに O/R マッピングを行う Entity Framework プロジェクトを実際に出荷した人はいますか?

つまり、ジャンクション (M:M) テーブルを他のエンティティに集約して、ビジネス ドメインに存在する概念クラスを形成しますが、データストアでは複数のテーブルとして編成されます。MSDN で見たすべての例では、継承、結合テーブルを他のエンティティに折りたたんだり、ルックアップ テーブルをエンティティに折りたたんだりすることはほとんどありません。

ビジネス オブジェクトに対して一般的に期待されるすべての CRUD 操作をサポートする以下の例を聞いたり、見たりしたいと思っています。

  1. 車両テーブルとカラー テーブル。色は多くのビークル (1:M) に表示されます。これらは、プロパティ Color を持つ概念クラス UsedCar を形成します。

  2. Doctor、DoctorPatients、および Patients テーブル (多対多を形成します)。医者には多くの患者がいて、患者には多くの医者がいます (M:M)。Doctor (Patients コレクションを持つ) と Patients (Doctors コレクションを持つ) という 2 つの概念クラスを作成します。

Entity Framework で CSDL と SSDL を使用してこれを見た/行った人はいますか? CSDL は、実際に何にもマップされていなければ意味がありません。

4

3 に答える 3

5

それが何であるかを確認するためだけに、既存のプロジェクト(〜60のテーブル、継承のある3)でEntity Frameworkを使用しようとしました。私の経験は次のように要約されます。

デザイナーの表面はぎこちない。マッピングは直感的ではなく、複数のツール ウィンドウを同時に開いても問題ないと誰かが考えたに違いありません。オブジェクトを手動で作成して適切なフィールドをマッピングするのに長い時間がかかりましたが、コードからそれを操作するのはまだ奇妙でした。データベース通信を処理する何かを持つことは不可欠ですが、制御を EF に渡すことは、手動で行うよりもはるかに苦労したと感じています。

Visual Studio を再起動するまでデザイナーが読み込まれないことがあります。ただのバグだと思いますが、VS を再起動するのは面倒です。

すべての作業は 1 つのファイルにまとめられます。複数の開発者版をマージしたくありません。

結果の SQL (Profiler で監視) はあまり良くありませんでした。理由を詳しく調べたわけではありませんが、最初の試みでもっと悪いことを書くように迫られるでしょう。

于 2008-09-12T01:49:31.587 に答える
3

Entity Framework - 不信任投票

それは私が言わなければならないすべてです...

于 2008-09-18T01:17:55.293 に答える
2

こんな感じですか?

<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>
于 2008-09-12T02:20:10.123 に答える