2008-09-11 17 views
12

¿Alguien realmente ha enviado un proyecto de Entity Framework que hace mapeo O/R en clases conceptuales que son bastante diferentes de las tablas en el almacén de datos?Cualquiera que use Entity Framework * ¿Bien *?

me refiero a colapsar unión (M: M) tablas en otras entidades para formar conceptuales clases que existen en el ámbito empresarial, pero están organizados como varias tablas en el almacén de datos. Todos los ejemplos que veo en MSDN tienen poco uso de herencia, el colapso de las tablas de unión en otras entidades o el colapso de las tablas de búsqueda en las entidades.

me gustaría escuchar o ver ejemplos del apoyo por debajo del cual todas las operaciones CRUD normalmente se esperaría que hacer en un objeto de negocio .:

  1. mesa de vehículo y una tabla de colores. Un Color puede aparecer en muchos vehículos (1: M). Forman la clase conceptual UsedCar que tiene la propiedad Color.

  2. Tablas de doctor, doctorpacientes y pacientes (forman muchas hasta muchas). Los médicos tienen muchos pacientes, los pacientes pueden tener muchos médicos (M: M). Trace las dos clases conceptuales Doctor (que tiene una colección de Pacientes) y Patients (que tiene una colección de Doctors).

Alguien ha visto/hecho esto con CSDL Y SSDL en el marco de la entidad? ¡El CSDL no es bueno si no se asigna correctamente a nada!

Respuesta

5

Intenté utilizar Entity Framework en un proyecto existente (~ 60 tablas, 3 con herencia) solo para ver de qué se trataba. Mi experiencia se redujo a:

La superficie del diseñador es kludgy. El mapeo no es intuitivo y alguien debe haber pensado que tener varias ventanas de herramientas abiertas al mismo tiempo es aceptable. Se tardó mucho tiempo en crear manualmente un objeto y mapear los campos correctos, entonces todavía era extraño hablar con él desde el código. Aunque es esencial tener algo que maneje la comunicación de la base de datos, creo que entregar el control a EF fue mucho más difícil que hacerlo manualmente.

A veces, el diseñador simplemente no carga hasta que reinicie Visual Studio. Estoy seguro de que es solo un error, pero reiniciar VS es molesto.

Todo su trabajo termina en un solo archivo, no me gustaría fusionar varias ediciones de desarrollador.

El SQL resultante (visto a través del Analizador) no era muy bueno. Realmente no profundicé en buscar por qué, pero te presionarían para escribir algo peor en un primer intento.

+0

Fue este reciente o durante la beta? Tuve una experiencia bastante amarga de beta que realmente no me entusiasmó con el EF. – Tyler

+0

Tan pronto como pude instalar el lanzamiento de SP1 en mi máquina de trabajo y echarle una hora. – Ant

2

¿Te refieres a esto?

<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

Esto se ve bien. Siempre he estado mapeando ese CSDL en el SSDL sobre lo que me he preguntado. ¿Dónde comienza el SSDL?Supongo que me pregunto si esto es simplemente más que nosotros describiendo las entidades con CSDL en una superficie de diseñador en blanco. Siempre ha sido el mapeo lo que ha sido una pregunta para mí. – Tyler