Ho class SetIdentitySeedOperation: MigrationOperation
, che imposta il valore dell'identità per la tabella specificata. Per collegarlo, utilizzo un SqlServerMigrationSqlGenerator
personalizzato, quindi se scrivo manualmente .AddOperation(new SetIdentitySeedOperation(...))
nel mio void Up()
della migrazione, viene chiamato il mio metodo Generate
e lì viene generato l'SQL appropriato.
Qual è il meccanismo per registrare questa operazione personalizzata con lo scaffolding della migrazione, in modo che il codice per aggiungere questa operazione venga generato su Add-Migration
?
AGGIORNAMENTO: ho esaminato il codice sorgente delle migrazioni EF e sembra che l'elenco delle operazioni di migrazione da impalcature provenga da una chiamata a EdmModelDiffer.Diff()
e che EdmModelDiffer
sia interno, quindi non c'è apparentemente alcun modo per collegare le tue convenzioni o attributi nel motore dell'armatura.
Alla luce di ciò, l'esistenza della superficie pubblica per le operazioni di migrazione e la generazione SQL sembra piuttosto inutile, in quanto non fornisce un vero punto di estensibilità per gli utenti della biblioteca, richiede all'utente di scrivere manualmente chiamate esplicite alle proprie operazioni di migrazione personalizzate, e questo è dopo aver dovuto scrivere un codice di codice per avvolgere la loro generazione SQL in un'operazione.
Quindi questo intero meccanismo è utile solo quando lo stesso codice si rivolge a database diversi?
Questo è ora possibile con EF 6.1:
Code First Annotations consente di impostare annotazioni su tabelle e colonne e quindi eseguire il hook nelle operazioni di scaffold estendendo SqlServerMigrationSqlGenerator
e modificare lo scaffold in base agli attributi impostati.