2011-03-06 10 views
8

Quiero extender una entidad EF en una clase parcial con métodos y propiedades. He hecho esto bastante a menudo. Pero ahora necesitaría combinar datos de esta entidad con datos de otras entidades. Por lo tanto, necesitaría poder acceder a las entidades objectcontext (si está adjunta) para hacer estas consultas. ¿Hay alguna manera de obtener las entidades objetocontexto desde dentro?Entity Framework 4: Acceda al contexto de datos actual en la clase parcial de entidad

Gracias!

+0

este dosent derecho de sonido, puede explicar por qué esto se requiere d? mayby ​​ther es otra forma de llegar a donde necesita ir (tal vez una asociación o un tipo complejo) – Menahem

Respuesta

2

No hay compilación en modo de obtener ObjectContext actual de la entidad. Las entidades basadas en la clase EntityObject y los proxies POCO usan ObjecContext internamente pero no lo exponen.

Agregar tal dependencia a sus entidades se considera un mal diseño, por lo que tal vez deba explicar lo que está tratando de hacer y podamos encontrar otra (mejor) solución.

+0

Hola. Nuestras entidades tendrán una propiedad "List ". Estas propiedades se definen en una metaestructura (unas pocas tablas) en la base de datos. Si se accede a esta propiedad de la entidad, necesitaría reunir la estructura y los valores de la base de datos. Nuestro diseño permite extender las entidades con propiedades "dinámicas". – SolarX

+0

Sin embargo, entiendo su preocupación con respecto al diseño defectuoso ... :) Podría mover esto a la capa de negocios, pero considero que es una abstracción de bajo nivel que debería residir en la capa de persistencia ... – SolarX

2

Aunque no se recomienda, y yo mismo no lo uso (como Ladislav declaró: mal diseño), me topé con un solución:

http://blogs.msdn.com/b/alexj/archive/2009/06/08/tip-24-how-to-get-the-objectcontext-from-an-entity.aspx

Método de extensión:

public static ObjectContext GetContext( 
    this IEntityWithRelationships entity 
) 
{ 
    if (entity == null) 
     throw new ArgumentNullException("entity"); 

    var relationshipManager = entity.RelationshipManager; 

    var relatedEnd = relationshipManager.GetAllRelatedEnds() 
             .FirstOrDefault(); 

    if (relatedEnd == null) 
     throw new Exception("No relationships found"); 

    var query = relatedEnd.CreateSourceQuery() as ObjectQuery; 

    if (query == null) 
     throw new Exception("The Entity is Detached"); 

    return query.Context; 
}

dentro de la entidad

var myContext = this.GetContext() as MyEntities;
+0

Ponga el ejemplo del código directamente en la respuesta, en caso de que la fuente referenciada desaparezca. – Tracker1

+0

Como dice el autor del artículo, esto no funcionará si la entidad no tiene relaciones. Alternativamente, esto se puede hacer [a través de la reflexión] (http://stackoverflow.com/a/26212071/111794). –

Cuestiones relacionadas