我有class SetIdentitySeedOperation: MigrationOperation
,它设置指定表的标识值。要连接它,我使用自定义SqlServerMigrationSqlGenerator
,所以如果我在迁移的.AddOperation(new SetIdentitySeedOperation(...))
中手动编写void Up()
,我的Generate
方法会被调用,并生成相应的SQL那里。
使用迁移脚手架注册此自定义操作的机制是什么,以便在Add-Migration
上生成添加此操作的代码?
更新:我一直在关注EF迁移源代码,似乎获取scaffolded的迁移操作列表来自对EdmModelDiffer.Diff()
的调用,而EdmModelDiffer
是内部的,所以似乎无法将自己的约定或属性插入到脚手架引擎中。
鉴于此,迁移操作和SQL生成的公共表面的存在似乎毫无意义,因为它没有为库用户提供真正的可扩展点,要求用户手动将显式调用写入其自定义迁移操作,并且必须编写一些样板代码以将其SQL生成包装到操作中。
当相同的代码针对不同的数据库时,整个机制才有用吗?
答案 0 :(得分:3)
现在可以使用EF 6.1:
Code First Annotations允许您在表和列上设置注释,然后通过扩展SqlServerMigrationSqlGenerator
并根据您设置的属性更改脚手架来挂钩脚手架操作。