Question

Quelqu'un a-t-il réellement livré un projet Entity Framework qui effectue le mappage O/R dans des classes conceptuelles assez différentes des tables de la banque de données ?

Je veux dire réduire les tables de jonction (M: M) dans d'autres entités pour former Conceptuel cours qui existent dans le domaine des affaires mais sont organisés en plusieurs tables dans la banque de données.Tous les exemples que je vois sur MSDN utilisent peu l'héritage, la réduction des tables de jonction en d'autres entités ou la réduction des tables de recherche en entités.

J'aimerais entendre parler ou voir des exemples des éléments ci-dessous qui prennent en charge toutes les opérations CRUD que vous vous attendez généralement à effectuer sur un objet métier. :

  1. Table de véhicules et table de couleurs.Une couleur peut apparaître dans de nombreux véhicules (1:M).Ils forment la classe conceptuelle UsedCar qui possède la propriété Color.

  2. Tableaux Docteur, DocteurPatients et Patients (formant plusieurs à plusieurs).Les médecins ont de nombreux patients, les patients peuvent avoir plusieurs médecins (M:M).Cartographiez les deux classes conceptuelles Doctor (qui possède une collection Patients) et Patients (qui possède une collection Doctors).

Quelqu'un a-t-il vu/fait cela avec CSDL ET SSDL dans Entity Framework ?Le CSDL ne sert à rien s'il ne correspond réellement à rien !

Était-ce utile?

La solution

J'ai essayé d'utiliser Entity Framework sur un projet existant (~ 60 tables, 3 avec héritage) juste pour voir de quoi il s'agissait.Mon expérience se résume à :

La surface du designer est fastidieuse.Le mappage n’est pas intuitif et quelqu’un a dû penser qu’avoir plusieurs fenêtres d’outils ouvertes en même temps était acceptable.Il fallait beaucoup de temps pour créer manuellement un objet et mapper les bons champs – alors c'était toujours étrange de lui parler à partir du code.Bien qu'il soit essentiel d'avoir quelque chose qui gère la communication avec la base de données, Je pense que confier le contrôle à EF était bien plus un combat que de le faire manuellement.

Parfois, le concepteur ne se charge tout simplement pas tant que vous n'avez pas redémarré Visual Studio.Je suis sûr que ce n'est qu'un bug mais redémarrer VS est ennuyeux.

Tout votre travail se retrouve dans un seul fichier, je détesterais fusionner plusieurs éditions développeurs.

Le SQL résultant (regardé via le Profiler) n’était pas très bon.Je n’ai pas vraiment cherché à savoir pourquoi, mais vous seriez obligé d’écrire quelque chose de pire du premier coup.

Autres conseils

Entity Framework - Vote de censure

C'est tout ce que j'ai à dire...

Tu veux dire comme cela?

<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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top