Otra de las características que tenemos dentro de EF6 Contrib es la de agregar operaciones personalizadas de migración, por ahora ya hay unas cuantas que seguro serán de utilidad para algunas de vosotros y aquellas que no están seguro que pronto estarán o bien os animo a escribirlas. La ultima ha venido de un pull request de Quique ( @quiu3 ) en el que ha incluido la posibilidad de agregar computed columns, os animo a ver el pull request para ver lo sencillo que es incluir nuevas migraciones.
1 2 3 4 5 |
<span class="kwrd">public</span> <span class="kwrd">class</span> AddComputedColumnOperation : MigrationOperation { <span class="kwrd">public</span> <span class="kwrd">string</span> TableName { get; <span class="kwrd">private</span> set; } <span class="kwrd">public</span> <span class="kwrd">string</span> ColumnName { get; <span class="kwrd">private</span> set; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<span class="kwrd">public</span> AddComputedColumnOperation(<span class="kwrd">string</span> tableName, <span class="kwrd">string</span> columnName, <span class="kwrd">object</span> anonymousArguments) : <span class="kwrd">base</span>(anonymousArguments) { Check.NotEmpty(tableName, <span class="str">"tableName"</span>); Check.NotEmpty(columnName, <span class="str">"columnName"</span>); <span class="kwrd">this</span>.TableName = tableName; <span class="kwrd">this</span>.ColumnName = columnName; } <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">bool</span> IsDestructiveChange { get { <span class="kwrd">return</span> <span class="kwrd">false</span>; } } <span class="kwrd">public</span> <span class="kwrd">override</span> MigrationOperation Inverse { get { <span class="kwrd">return</span> <span class="kwrd">new</span> DropComputedColumnOperation(TableName,ColumnName); } } } |
Para hacer uso de estos elementos solamente tenemos que cambiar el generador a utilizar, por defecto en EF 6 Contrib solamente tenemos un generador para Sql Server. Establecer este generador es tan sencillo como se ve a continuación:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<span class="kwrd">internal</span> <span class="kwrd">sealed</span> <span class="kwrd">class</span> Configuration : DbMigrationsConfiguration<ConsoleApplication1.CRMContext> { <span class="kwrd">public</span> Configuration() { AutomaticMigrationsEnabled = <span class="kwrd">false</span>; SetSqlGenerator(<span class="str">"System.Data.SqlClient"</span>, <span class="kwrd">new</span> ExtendedSqlServerMigrationSqlGenerator()); } <span class="kwrd">protected</span> <span class="kwrd">override</span> <span class="kwrd">void</span> Seed(ConsoleApplication1.CRMContext context) { } } |
Por supuesto también se podría hacer utilizando un DbConfiguration, cualquier opción sería válida, a elegir. Hasta aquí esta pequeña entrada, espero que os sea de utilidad….
Saludos
Unai
1 |
|