¿Puedo crear propiedades de "retransmisión" o "genéricas" para los modelos de Entity Framework?

Espero que mi redacción tenga sentido ... No estaba muy seguro de cómo explicar exactamente lo que estoy buscando hacer.

Tengo un método en una clase genérica que devuelve una lista de entidades de la siguiente manera:

public abstract class ChildCRUDController<TModel> : CRUDController<TModel, ... >
    where TModel : IChildEntity

public ViewResult List(int id)
{
    return View(repository.GetMany(x => x.ParentID == id));
}

Este controlador es implementado por bastantes otros controladores. El problema que tengo es que no todas las entidades que implementan IChildEntity tienen el mismo tipo de padre. Para solucionar este problema, creé propiedades ParentID para todos los modelos que implementan IChildEntity para que pudieran usar el mismo controlador.

public partial class PhoneNumber : IChildEntity
{
    public int ParentID
    {
        get { return CustomerID; }
        set { CustomerID = ParentID; }
    }
}

y ...

public partial class Transaction : IChildEntity
{
    public int ParentID
    {
        get { return LeaseID; }
        set { LeaseID= ParentID; }
    }
}

Pero cuando llamo al método List anterior, obtengo el siguiente error:

El miembro de tipo especificado 'ParentID' no es compatible con LINQ to Entities. Solo se admiten inicializadores, miembros de entidad y propiedades de navegación de entidad.

¿Hay alguna forma de que pueda lograr el resultado que estoy buscando sin extraer el conjunto de objetos en la memoria o cambiar el nombre de todas las propiedades en las propias entidades?

¡Gracias!

preguntado el 09 de enero de 11 a las 05:01

1 Respuestas

Si está dispuesto a pasar el nombre del campo al List y para construir su propia consulta, puede hacerlo utilizando las técnicas descritas en este artículo de StackOverflow:

O podrías suministrar el ChildCRUDController con otro parámetro de tipo genérico restringido a una interfaz que proporciona el nombre del campo y lo usa de nuevo dinámicamente.

contestado el 23 de mayo de 17 a las 15:05

No conocía la biblioteca Dynamic LINQ. ¡Gracias! - Jeff Cámara

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.