今天开始使用FluentMigrator,不幸的是,我很确定我知道我的问题的答案,但是在使用Sql-Server提供程序时,有没有什么方法可以让FluentMigrator创建非聚簇主键?
我希望有类似的东西。 (显然不存在)..
Create.Table("User")
.WithColumn("Id").AsInt32().Identity().PrimaryKey().WithOptions().NonClustered()
到目前为止,我发现的最佳选择是使用带有SQL块的Execute,这远远不够理想......还有更好的选择吗?
答案 0 :(得分:2)
如果有人正在查看,现在可以使用Fluent.Runner.Extensions和SQL Server特定扩展来解决它。
https://github.com/schambers/fluentmigrator/wiki/Sql-Server-Specific-Extensions
答案 1 :(得分:2)
要创建非聚集索引,您应按照here的说明使用 FluentMigrator.SqlServer 。
代码如下:
Create.Table("User").WithColumn("Id").AsInt32().Identity();
// than create PK
Create.PrimaryKey("PK_User").OnTable("User").Column("Id").NonClustered();
答案 2 :(得分:0)
不幸的是,唯一的做法是使用:
Execute.Script(path);
基本上,FluentMigrator已经成为运行SQL脚本的工具,但是忽略了流畅的界面。基本上,它在这个项目中比我的项目中的任何东西都要多。可能会自己滚动,但迁移组件按预期工作。 Fluent界面太过限制,在定义表等时通常需要DB特定功能才能获得最佳性能(数据库不可知并不是一件好事)。
答案 3 :(得分:0)
这不是很漂亮,但它对我有用。添加扩展程序以包装脚本。
public static class FluentMigratorExtensions
{
public static void CreateNonClusteredPrimaryKey(this Migration migration, string indexName, string columnName, string tableName, string schemaName = "dbo")
{
var sql =
@"ALTER TABLE [{3}].[{2}] ADD CONSTRAINT {0} PRIMARY KEY NONCLUSTERED ({1});";
sql = string.Format(sql, indexName, columnName, tableName, schemaName);
migration.Execute.Sql(sql);
}
}
在您的迁移中将其命名为
this.CreateNonClusteredPrimaryKey("PK_Users",
"Id",
"Users",
"security");