Pregunta

A raíz de una dicsussion Así que aquí , he implementado clases parciales a fin de crear por defecto de fecha y hora valores para mis campos de base de datos creados y modificados en un constructor.

Ahora el problema es que mi base de datos tiene más de 100 cuadros, y más de 75 de ellos tienen la misma estructura básica que incluye un Creado y una definición de columna Modificado.

Así que .. En lugar de crear más de 75 clases parciales que tengo que mantener, ¿hay alguna manera de que pueda crear una clase base que cada tipo EF heredera, que hereda el constructor por defecto para rellenar los valores de DateTime para crear y modificar ?

EDIT: Digno de mención es que estoy usando EF 4.0

¿Fue útil?

Solución

Por supuesto que puede especificar su propia clase base con tanto EF4 y EF1, aunque es mucho más fácil con EF4. Haga clic derecho sobre la superficie de diseño y debería ver una opción para añadir un elemento de generación de código. Seleccionar el generador ADO.Net entidad objeto. Esto T4 un archivo a su proyecto (extensión .tt) que especifica la plantilla que desea utilizar para generar sus clases de entidad a partir del modelo. Para especificar una clase base diferente, mirada al interior por una línea como

Private Function BaseTypeName(ByVal entity As EntityType, ByVal code As CodeGenerationTools) As String
    Return If(entity.BaseType Is Nothing, "EntityObject", MultiSchemaEscape(DirectCast(entity.BaseType, StructuralType), code))
End Function

Reemplazar EntityObject con su clase base. Tenga en cuenta que si está utilizando esta plantilla entonces su clase base debe heredar de System.Data.Objects.DataClasses.EntityObject -. Se puede usar un molde POCO lugar, pero esto probablemente será suficiente para usted

Otros consejos

Por supuesto que puede decirle a EF para usar una clase base para sus entidades (que está justo en el diseñador como una propiedad de la entidad) ... pero si usted quiere asegurarse de que el valor predeterminado para este campo, tal vez usted podría enganchar en los dos eventos en el ObjectContext SavingChanges y ObjectMaterialized.

http://msdn.microsoft. com / es-es / library / system.data.objects.objectcontext.savingchanges.aspx

http://msdn.microsoft. com / es-es / library / system.data.objects.objectcontext.objectmaterialized.aspx

Se podría utilizar estas oportunidades para inyectar el valor (s) predeterminado que desea usar. Así que en su manejador SavingChanges, por ejemplo, podrías comprobar el ObjectStateManager en el contexto para ver si el estado de la entidad relevante es EntityState.Added, a continuación, establecer las fechas de creación y modificación según se desee.

Como alternativa, como se sugiere, ¿hay alguna razón el valor predeterminado para la columna en SQL Server no puede ser sólo GetDate ()? (Asumiendo que usted está utilizando SQL Server) ....

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top