如何为脚手架注册自定义EF Code First迁移操作?

时间:2013-12-04 12:46:47

标签: c# .net entity-framework ef-migrations entity-framework-6

我有class SetIdentitySeedOperation: MigrationOperation,它设置指定表的标识值。要连接它,我使用自定义SqlServerMigrationSqlGenerator,所以如果我在迁移的.AddOperation(new SetIdentitySeedOperation(...))中手动编写void Up(),我的Generate方法会被调用,并生成相应的SQL那里。

使用迁移脚手架注册此自定义操作的机制是什么,以便在Add-Migration上生成添加此操作的代码?


更新:我一直在关注EF迁移源代码,似乎获取scaffolded的迁移操作列表来自对EdmModelDiffer.Diff()的调用,而EdmModelDiffer是内部的,所以似乎无法将自己的约定或属性插入到脚手架引擎中。

鉴于此,迁移操作和SQL生成的公共表面的存在似乎毫无意义,因为它没有为库用户提供真正的可扩展点,要求用户手动将显式调用写入其自定义迁移操作,并且必须编写一些样板代码以将其SQL生成包装到操作中。

当相同的代码针对不同的数据库时,整个机制才有用吗?

1 个答案:

答案 0 :(得分:3)

现在可以使用EF 6.1:

Code First Annotations允许您在表和列上设置注释,然后通过扩展SqlServerMigrationSqlGenerator并根据您设置的属性更改脚手架来挂钩脚手架操作。