如何使用Fluent NHibernate在两个属性上创建涉及逻辑的UNIQUE约束

时间:2011-12-12 13:53:18

标签: nhibernate fluent-nhibernate

我有这样的课程:

public class Link
{
     public virtual long Id { get; set; }
     public virtual string IdentifierA { get; set; }
     public virtual string IdentifierB { get; set; }
}

和这样的映射:

public class LinkMap : ClassMap<Link>
{
    public LinkMap()
    {
        Id(x => x.Id);
        Map(x => x.IdentifierA);
        Map(x => x.IdentifierB);
    }
}

我想只存储链接,A,数据库中没有链接B,这样:

((A.IdentifierA == B.IndentifierA && A.IdentifierB == B.IdentifierB) || (A.IdentifierA == B.IndentifierB && A.IdentifierB == B.IdentifierA))

我认为两个给定标识符之间的任何两个链接都是同一个链接,只想存储其中一个。

我可以用Fluent NHibernate设置吗?如果是,怎么样?

1 个答案:

答案 0 :(得分:1)

您可以定义数据库唯一约束

Map(x => x.IdentifierA).UniqueKey("Identifier_key");
Map(x => x.IdentifierB).UniqueKey("Identifier_key");

但在你的场景中,我认为在一个地方更好地处理代码。选择是否存在具有指定条件的实体并返回该实体而不是保存新实体。