2010-01-06 11 views
8

Estoy intentando configurar un proyecto utilizando Entity Framework 4, POCO y Code-Only.Uso de una interfaz con una propiedad de navegación

¿Es posible en el marco de entidades para el tipo de propiedad de navegación ser una interfaz?

Tengo una clase "Tarea". Una Tarea se puede asignar a un usuario o un grupo, cada uno de los cuales se representa por una clase separada y se almacena en tablas separadas. Las clases tienen el siguiente aspecto:

public class User : IAssignable 
{ 
    public String Name { get; set; } 
    public int ID { get; set; } 
    public String Email { get; set; } 
    public String Password { get; set; } 
} 

public class Group : IAssignable 
{ 
    public String Name { get; set; } 
    public int ID { get; set; } 
    public String Manager { get; set; } 
    public String Department { get; set; } 
} 

public class Task 
{ 
    public String Title { get; set; } 
    public DateTime DueDate { get; set; } 
    public String Details { get; set; } 
    public IAssignable AssignedTo { get; set; } 
} 

¿Hay alguna manera de la propiedad puede AssignedTo como una propiedad de navegación en el marco de la entidad? Supongo que tendrá que haber algún tipo de discriminador para que EF sepa si debe buscar en la tabla Usuarios o en la tabla Grupos pero puedo deducir la asignación usando Sólo código o EDMX.

+0

También estoy interesado en una solución a esto. – Ciel

Respuesta

0

Puede ahorrar mucho trabajo utilizando el Text Tool Transformation Toolkit (T4) compatible con EF4. Me pareció que éste después de un buen 12 horas de buscar una forma de evitar la creación manual de mis POCOs e interfaces,

http://blogofrab.blogspot.com/2010/08/maintenance-free-mocking-for-unit.html

Además de proporcionar una base excelente para las pruebas unitarias, se genera automáticamente las propiedades de navegación basados ​​en las relaciones definido en tu modelo.

1

Sé que esto es una cuestión de edad, pero no, no hay ninguna característica de Entity Framework (incluso la última versión 6) que le permite mapear una propiedad de navegación con un tipo de interfaz.

Sin embargo, puede mapear múltiples propiedades de navegación con tipos concretos (y una restricción de que solo uno puede establecerse) y proporcionar una propiedad no asignada de su tipo de interfaz que combina las propiedades concretas de navegación en una sola propiedad. Desafortunadamente, esto puede hacer que sus consultas sean más complejas debido a que ciertas consultas necesitarán saber qué propiedades de navegación concretas se deben consultar (y no se puede consultar en contra de su propiedad de interfaz no asignada).

Existe una complejidad significativa en torno al soporte de propiedades de navegación polimórficas. Considere lo que debería suceder para consultar su propiedad original AssignedTo si supone que está asignada a una columna como AssignedToId int. Tendría que unir o unir conjuntos de entidades User y Group y esperar que aparezca un AssignedToId en solo uno de ellos. Este es el enfoque utilizado por la asignación de tipo Table-Per-Concrete (TPC), pero solo funciona con herencia de clase (no interfaces) y una planificación cuidadosa para generar identificadores distintos en los tipos participantes.

Cuestiones relacionadas