2008-09-11 18 views
12

Hat jemand tatsächlich ein Entity Framework-Projekt ausgeliefert, das O/R-Mapping in konzeptionellen Klassen durchführt, die sich stark von den Tabellen im Datenspeicher unterscheiden?Wer nutzt das Entity Framework * Nun *?

meine ich kollabieren Kreuzung (M: M) Tabellen in andere Einheiten Konzeptionelle Klassen zu bilden, die in der Business-Bereich existieren, sondern als mehrere Tabellen im Datenspeicher organisiert. Alle Beispiele, die ich auf der MSDN sehe, haben wenig Gebrauch von der Vererbung, dem Zusammenlegen von Junction-Tabellen in andere Entitäten oder dem Kollabieren von Lookup-Tabellen in Entitäten.

Ich würde gerne von hören oder Beispiele für die unter dem sehen unterstützen alle CRUD-Operationen Sie in der Regel auf einem Business-Objekt .: zu tun erwarten

  1. Fahrzeugtisch und eine Farbtabelle. Eine Farbe kann in vielen Fahrzeugen (1: M) erscheinen. Sie bilden die konzeptionelle Klasse UsedCar mit der Eigenschaft Color.

  2. Arzt, Arzt Patienten und Patienten Tabellen (bilden eine viele zu viele). Ärzte haben viele Patienten, Patienten können viele Ärzte haben (M: M). Ordnen Sie die beiden konzeptionellen Klassen "Doktor" (mit einer Patientensammlung) und "Patienten" (mit einer Arztkollektion) zu.

Wer gesehen/diese mit CSDL UND SSDL im Entity Framework getan? Die CSDL ist nicht gut, wenn sie nicht wirklich zu etwas passt!

Antwort

5

Ich habe versucht, das Entity Framework für ein bestehendes Projekt zu verwenden (~ 60 Tabellen, 3 mit Vererbung), nur um zu sehen, worum es ging. Meine Erfahrung ist:

Die Designeroberfläche ist kludgy. Das Mapping ist nicht intuitiv und jemand muss gedacht haben, dass das Öffnen mehrerer Werkzeugfenster zur gleichen Zeit akzeptabel ist. Es hat lange gedauert, ein Objekt manuell zu erstellen und die richtigen Felder zuzuordnen - dann war es immer noch komisch, mit dem Code zu sprechen. Während ich etwas mit der Datenbank zu tun habe, ist die Kommunikation wichtig, Ich denke, dass die Übergabe der Kontrolle an EF weit mehr als ein Kampf war, als es manuell zu tun.

Manchmal wird der Designer nur geladen, bis Sie Visual Studio neu starten. Ich bin mir sicher, dass es nur ein Fehler ist, aber das Neustarten von VS ist nervig.

Alle Ihre Arbeit endet in einer einzigen Datei, ich würde es hassen, mehrere Entwickler-Editionen zusammenzuführen.

Die resultierende SQL (über den Profiler beobachtet) war nicht sehr gut. Ich habe mich nicht wirklich damit beschäftigt, nach dem Grund zu suchen, aber Sie würden gezwungen sein, auf Anhieb etwas Schlimmeres zu schreiben.

+0

War diese letzten oder während der Beta? Ich hatte eine ziemlich saure Beta-Erfahrung, die mich nicht wirklich wegen der EF begeisterte. – Tyler

+0

Sobald ich das Release von SP1 auf meiner Arbeitsmaschine installieren konnte und eine Stunde darauf werfen. – Ant

2

Sie meinen so?

<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> 
+0

Das sieht gut aus. Es hat immer das CSDL auf die SSDL gemappt, über die ich mich gewundert habe. Wo fängt die SSDL an?Ich nehme an, ich frage mich, ob das einfach mehr ist, als wir die Entitäten mit CSDL auf einer leeren Designer-Oberfläche beschreiben. Es war immer das Mapping, das für mich eine Frage war. – Tyler