NHibernate - 带WHERE子句的唯一索引

时间:2013-12-23 11:59:10

标签: 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。

2 个答案:

答案 0 :(得分:0)

您可以在mapping class中提及唯一列:请查看以下示例

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);            
    }
}

答案 1 :(得分:0)

如果我理解正确,您希望检查列是否唯一,除非它为null。如果为null,则可以多次出现null吗?

然后不,我找不到任何设置它的选项。

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

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