2010-04-07 9 views
6

Estoy usando Entity Framework v4. Creé una clase POCO que contiene un conjunto de propiedades escalares y una colección que devuelve un tipo de interfaz. ¿Cómo creo esta relación en el modelo EF? ¿Cómo se muestra una colección que contiene diferentes elementos pero todos tienen una interfaz común? Aquí hay un ejemplo de lo que estoy tratando de lograr.Entity Framework y Colecciones de Modelado con una Interfaz como tipo de retorno

interface IPatientDocument{} 
public class Lab : IPatientDocument{.....} 
public class Encounter : IPatientDocument{...} 
public class MedicationLog : IPatientDocument{...} 

//Incomplete class listing 
//Once I have aggregated the different doc types, I can then use Linq to Obj to retrieve the specific doc type I need. Currently I have about 26 doc types and do not want to create a collection for each one 
public class Patient 
{ 
    IList<IPatientDocument> DocumentCollection; 
} 
+0

Sigo mirando esta pregunta porque suena realmente interesante. Pero creo que solo necesita un poco más de información. Muestra de código tal vez? Me pregunto si vas a tener que romper una plantilla T4 para hacer esto. – itchi

+0

Sí, por favor, elabore más. ¿Sus tipos de IPatientDocument (Lab, Encounter, MedicationLog) son sus tipos de POCO? ¿Es el paciente un tipo de POCO? ¿Todos son parte de tu modelo? –

Respuesta

0

No sé si eso es completamente legal. Si pudieras implementar usando una clase base, probablemente harías tabla por herencia de tipo, lo cual está permitido. Pero si solo está intentando seleccionar tipos arbitrarios, está entrando en varianza co y contra, lo que podría valer la pena investigar ya que es nuevo en .NET 4.

3

Sea muy muy muy cuidado si está usando TPT (Herencia de Table-Por-Tipo) con Entity Framework. Especialmente si tiene 26 tipos de documentos. I did a blog post en la generación SQL interrumpida para la herencia TPT, y también opened a bug on Microsoft Connect. MS ha admitido el problema, y ​​dicen que están trabajando en ello, pero no aguantan la respiración. Les tomó 3 meses reconocer el problema, y ​​todo lo que dijeron fue "Estamos conscientes de los problemas de rendimiento con las jerarquías TPT. Actualmente estamos investigando soluciones y esperamos hacer mejoras en esta área en una versión futura".

Con 26 tipos de documento, incluso con una consulta básica, EF tardará casi 2 minutos en generar el SQL (que estará en el entorno de 8000 líneas) y SQL Server para procesarlo. Tendrás 30 niveles de profundidad en ridículas subconsultas. Evite la herencia TPT a toda costa. Si acaba de iniciar una aplicación, parece que funciona, porque generalmente solo tiene algunos subtipos, pero una vez que agrega más, su aplicación se ralentizará.

+0

+1 pero sobre todo por la publicación de tu blog que leí hace meses :) Tuve una implementación de TPT (más de 30 clases) por la que estamos pagando el precio por ahora. La publicación de tu blog me hizo saber que no era solo yo. Ahora lo trabajo en el futuro. – itchi

Cuestiones relacionadas