2011-07-14 13 views
6

Duplicar posible:
EF4 Cast DynamicProxies to underlying objectC# Clone System.Data.Entity.DynamicProxies a la clase real (sin proxy)?

estoy tratando de encontrar la manera de clonar o convertir un System.Data.Entity.DynamicProxies en su clase real. Por ejemplo:

System.Data.Entity.DynamicProxies.Currency_F4008E27DE_etc is the proxy class 
MyApp.Entities.Currency is the real class 

Todas las clases en MyApp.Entities hereda de BaseEntity, por lo que trató de hacer la conversión de allí:

public abstract partial class BaseEntity 
{ 
    public T ShallowCopy<T>() where T : BaseEntity 
    { 
     return this.MemberwiseClone() as T; 
    } 
    // other BaseEntity properties not relevent here 
} 

Y luego convertir los DynamicProxies en la clase real:

// this returns a DynamicProxies class 
Currency currency = LookupDefaultCurrency(); 
// this one needs to return a Entities.Currency class 
// (but currently returns a DynamicProxies class too 
Currency pocoCurrency = (Currency)currency.ShallowCopy<Currency>(); 
HttpRuntime.Cache[key] = pocoCurrency; 

La razón de esto es que quiero eliminar todo el seguimiento de Entity Framework, etc. de este objeto y simplemente almacenar sus propiedades simples (POCO) en la caché. Y tendré que poder hacer esto para las aproximadamente 100 clases de Entity, por lo que tiene que ser razonablemente genérico, sin decir manualmente object1.foo = object2.foo para cada propiedad.

+0

¿Por qué no desactivó la generación proxy como lo hizo en la pregunta anterior? –

+0

Resulta que eso no es lo que necesitaba. Necesito que sean proxies (con todo el seguimiento, etc.) la mayor parte del tiempo. Pero cuando se almacena en caché para su lectura posterior, solo uso, necesita ser un objeto no proxy, consulte http://stackoverflow.com/questions/6688772/c-entity-framework-using-only-one-objectcontext-per-httpcontext –

+0

Puede activar la creación de proxy de forma selectiva para algunas instancias de contexto o incluso consultas, por lo que Imho debería estar en condiciones de desactivar los servidores proxy solo para cargar sus monedas. –

Respuesta

1

Tal vez this article es útil. Discute varios métodos para clonar datos. No estoy seguro de si estos métodos pueden usarse para convertir un objeto de tipo A en un objeto de tipo B. Pero definitivamente vale la pena intentarlo.

Estaría muy interesado en el resultado de esto, ya que this NuGet package también usa el patrón de repositorio genérico y memcached para abordar la misma técnica de almacenamiento en caché y su problema parece ser el mismo allí al deserializar los datos.

+1

@JK ¿Podría proporcionar qué método lo hizo funcionar para usted, estoy muy interesado, ya que tengo el mismo problema en mi proyecto. – erikvda

Cuestiones relacionadas