Domanda

A seguito di un SO dicsussion qui , ho implementato classi parziali in modo da creare di default datetime valori per i miei campi di database creati e modificati in un costruttore.

Ora il problema è che il mio database ha più di 100 tavoli, e 75+ di loro hanno la stessa struttura di base che comprende un Creato e una definizione di colonna modificata.

Quindi .. Invece di creare 75 + classi parziali, che ho bisogno di mantenere, c'è un modo per creare una classe base che ogni tipo EF eredita, che eredita il costruttore predefinito per popolare i valori DateTime per creare e modificare ?

EDIT: Degno di nota è che sto usando EF 4.0

È stato utile?

Soluzione

Si può certamente specificare la propria classe di base sia con EF4 e EF1, anche se è molto più facile con EF4. Fare clic destro sulla superficie di progettazione e si dovrebbe vedere la possibilità di aggiungere un elemento di codice generazione. Selezionare il generatore di ADO.Net dell'entità oggetto. Questo sarà un file T4 al progetto (estensione .tt) che specifica il modello da utilizzare per generare le vostre classi di entità dal modello. Per specificare una classe di base diversa, sguardo al suo interno per una linea simile a

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

Sostituire EntityObject con la classe di base. Si noti che se si utilizza questo modello allora la vostra classe di base deve ereditare da System.Data.Objects.DataClasses.EntityObject -. Si potrebbe utilizzare un modello POCO invece, ma questo sarà probabilmente abbastanza per voi

Altri suggerimenti

Si può certamente dire EF per utilizzare una classe base per le vostre entità (è proprio nella finestra di progettazione come una proprietà per l'entità) ... ma se si vuole fare in modo del valore di default per questo campo, forse si potrebbe agganciarsi i due eventi sul ObjectContext SavingChanges e ObjectMaterialized.

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

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

Si potrebbe usare queste opportunità per iniettare il valore di default (s) che si desidera utilizzare. Quindi nel tuo gestore SavingChanges, per esempio, potreste controllare l'ObjectStateManager sul contesto per vedere se lo stato del soggetto rilevante è EntityState.Added, quindi impostare le date di creazione e modifica, se lo desideri.

In alternativa, come suggerito, c'è un motivo, il valore predefinito per la colonna in SQL Server non può essere solo GetDate ()? (Supponendo che si sta utilizzando SQL Server) ....

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top