如何创建一个唯一约束,该约束也允许流利的迁移器出现空值?

How do I create a unique constraint that also allows nulls with fluent migrator?

我想对要用 GUID 填充的列设置唯一约束。但是,我的数据包含此列的空值。如何在不违反唯一约束的情况下使用 Fluent Migrator 创建允许多个空值的约束?

我找到了 SqlServer here 的解决方法。所以可以使用FluentMigrator的IfDatabase,对SqlServer执行raw SQL。但我想找到一个不依赖于系统的解决方案。

SQL服务器解决方案:

IfDatabase("sqlserver").Execute.Sql("
  CREATE UNIQUE NONCLUSTERED INDEX foo
  ON dbo.bar(key)
  WHERE key IS NOT NULL;
");

此功能 - 过滤索引、部分索引等 - 是高度特定于 DBMS 的。例如,SQL Server 和 PostgreSQL 有不同的语法,而 MySQL 根本不支持它。

由此可见,由于存在不支持该功能的DBMS,FluentMigrator无法在通用的索引创建接口中提供该功能。但是,它确实为 for SQLServer explicitly as SqlServer.SqlServerExtensions.UniqueNullsNotDistinct.

提供了一个流畅的界面