2011-05-23 11 views
6

Soy nuevo en EF así que discúlpeme si esta es una pregunta de novato.Modelo de estructura de entidad extendida para incluir nueva propiedad

Básicamente, tenemos un modelo de EF configurado utilizando Model First para nuestro proyecto 'plataforma' y se comparte en muchas aplicaciones que creamos sobre esta plataforma. En algunas de estas aplicaciones, queremos extender las clases para incluir propiedades adicionales sin cambiar el modelo en la plataforma. ¿Es esto posible con EF 4 y cómo podría hacerlo sin modificar el archivo .edmx?

Observé que las clases generadas son todas parciales, así que potencialmente podría crear una nueva clase parcial con el mismo nombre para incluir las nuevas propiedades, pero ¿hay alguna asignación que deba tenerse en cuenta?

p.s. en circunstancias normales, hubiera preferido usar la herencia y crear una nueva clase para mantener las nuevas propiedades en su lugar, pero una vez más, no sé cómo hacer eso con EF ... ¡cualquier aclaración aquí será muy apreciada!

Muchas gracias,

Respuesta

20

No se puede utilizar la herencia porque una vez que la entidad se carga desde la fuente de datos EF no sabrá acerca de la herencia y por eso creará una instancia del tipo base sin sus propiedades en lugar del tipo derivado con sus propiedades. Cualquier herencia debe ser mapeada en EDMX si EF tiene que trabajar con ella.

Usando clase parcial va a resolver su problema, pero:

  • Todas las partes de la clase parcial, debe definirse en el mismo conjunto
  • Propiedades de su parte parcial no se conservan a la base de datos
  • Propiedades su parte parcial no se puede utilizar en consultas de linq-a-entidades
+0

gracias, eso más o menos respondió todo lo que quería saber – theburningmonk

+0

Me encanta esto .... Es mi nuevo mejor amigo. Muchas gracias – Stimul8d

+0

"debe estar definido en el mismo conjunto" me ayudó. Me gustaría ampliar la entidad según el dominio en el que se está incluyendo.sin usar algo como Automapper para el enlace entre capas. – hanzolo

7

EF genera las clases parciales. Así extender myEntity, crear un archivo con MyEntity.cs

partial class MyEntity 
{ 
    public string MyExtraProperty {get;set;} 
} 

edición: en el mismo espacio de nombres que sus entidades generadas

+0

No existe solo en la memoria – Kaido

+0

pero no puedo crear una clase parcial en un proyecto separado, ¿hay alguna forma de evitarlo? – theburningmonk

+0

Puede cambiar la plantilla para que derive de su propia clase de clase, qué clase puede estar en otro proyecto, pero la clase base debe derivarse de EntityObject. –

1

Estoy de acuerdo con la adición de propiedades adicionales a la clase parcial de sus entidades (como usted y Kaido dijeron)

De esta forma puede agregar libremente las propiedades que desee, sin modificar las clases generadas y si genera su modelo nuevamente (o lo actualiza desde DB), su clase parcial no se modifica.

En mi opinión, agregar propiedades a clases parciales de entidades generadas es el camino a seguir.

Cuestiones relacionadas