You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 3.1中如何将SQL Server带包含列的非聚集索引创建语句转换为FluentMigrator表达式

解决FluentMigrator中添加INCLUDE列的问题

嗨,刚好我之前也处理过类似的场景,帮你把这段SQL转换成正确的FluentMigrator代码,顺便纠正你现有代码里的一个小误区!

首先,你现有代码里的.OnColumn("MyColumn1").Unique()和.OnColumn("MyColumn2").Unique()是不对的——因为你的原始SQL里并没有创建唯一非聚集索引,.Unique()会给索引加上唯一约束,这和你要实现的效果不符,得把这两个.Unique()去掉。

接下来是你最关心的INCLUDE子句的实现:FluentMigrator专门提供了.IncludeColumns()方法,用来指定索引的包含列,你可以直接传入多个列名作为参数。另外,SQL里的ONLINE = ON选项,在FluentMigrator中可以通过.WithOptions().NonClustered().Online()来配置。

完整的代码如下:

Create.Index("nci_wi_XXXXXX")
    .OnTable("MyTable")
    .OnColumn("MyColumn1").Ascending() // 不写的话默认也是升序,可省略
    .OnColumn("MyColumn2").Ascending()
    .IncludeColumns("MyColumn3", "MyColumn4", "MyColumn5", "MyColumn6", "MyColumn7", "MyColumn8", "MyColumn9")
    .WithOptions()
        .NonClustered()
        .Online(); // 对应SQL中的ONLINE = ON

关键部分说明:

  • .IncludeColumns(...):完全对应SQL语句中的INCLUDE子句,把需要包含的非索引列一次性传入即可
  • .Online():仅适用于SQL Server(你的场景刚好匹配),开启在线索引创建,避免锁表
  • 去掉.Unique():因为你的原始SQL没有指定唯一约束,保留的话会生成CREATE UNIQUE NONCLUSTERED INDEX,不符合需求

如果你的索引列需要指定降序排序,只需要把.Ascending()换成.Descending()就行,比如.OnColumn("MyColumn1").Descending()。

内容的提问来源于stack exchange,提问作者Artur Quirino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 06:57:33