C# NHibernate-带WHERE子句的唯一索引

C# NHibernate-带WHERE子句的唯一索引,c#,sql-server,nhibernate,fluent-nhibernate,C#,Sql Server,Nhibernate,Fluent Nhibernate,我使用的是Fluent NHibernate,我试图创建一个具有忽略空值的唯一列的表。经过长期研究,我得出结论,唯一可行的方法是使用WHERE子句创建唯一索引,如: CREATE UNIQUE NONCLUSTERED INDEX IX_MyIndex on MyTable (MyColumn) WHERE MyColumn IS NOT NULL 现在,我在需要时手动运行此脚本。有没有办法将列映射到Fluent中,使其自动检查 我正在使用Sql Server 2012。您可以在映射类中提到唯

我使用的是
Fluent NHibernate
,我试图创建一个具有忽略空值的唯一列的表。经过长期研究,我得出结论,唯一可行的方法是使用WHERE子句创建唯一索引,如:

CREATE UNIQUE NONCLUSTERED INDEX IX_MyIndex on MyTable (MyColumn)
WHERE MyColumn IS NOT NULL
现在,我在需要时手动运行此脚本。有没有办法将列映射到
Fluent
中,使其自动检查


我正在使用Sql Server 2012。

您可以在
映射类中提到唯一列:检查以下示例

public class AccountsMap : ClassMap<Accounts>
{
    public AccountsMap()
    {
        Id(x => x.Id).GeneratedBy.Increment();
        Map(x => x.Username).Unique().Nullable(); //Here the username column is unique 
        Map(x => x.Password);            
    }
}
公共类帐户映射:类映射
{
公共会计
{
Id(x=>x.Id).GeneratedBy.Increment();
Map(x=>x.Username).Unique().Nullable();//这里的Username列是唯一的
映射(x=>x.Password);
}
}

如果我理解正确,您需要检查该列的值是否唯一,除非它为null。如果为null,null可以多次出现,对吗

那么不,我找不到任何选项来设置它

nhibernate中的模式生成根本不支持它


Map(x=>x.MyColumn).Unique().Nullable()
将为此列创建一个唯一的索引,并且该列可以为空,尽管您不能插入多个具有空值的行…

这将只允许一行具有空值。用户名为NULL的下一次插入将引发异常。。。