如何创建一个唯一约束,该约束也允许流利的迁移器出现空值?
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.
提供了一个流畅的界面
我想对要用 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.
提供了一个流畅的界面