具有UniqueKey约束的一对多关系

| 我是Fluent-NHibernate的新手。 我的问题是想要在两个实体之间建立一对多关系。 一个产品可以有多个(唯一的)修订版,而一个特定的修订版仅属于一个产品。 因此,例如Product1有一个修订版\“ a \”和一个修订版\“ b \”,但是不能有两个修订版\“ a \”。这就是我的类定义:
public class Product
{
    public virtual int ID {get; private set;}
    public IList<ProductRevision> revisions { get; set; }

}


public class ProductRevision
{
        public virtual int ID {get; private set;}
        public Product isRevisionOf { get; set; }
        public virtual string revision { get; set; }
}
这是我的地图
public class ProductMap : ClassMap<Product>
{

    public ProductMap()
    {

        Id(x => x.ID).Column(\"ProductNo\");
        HasMany(x => x.revisions).Cascade.All();
    }

}

public class ProductRevisionMap : ClassMap<ProductRevision>
{
    public ProductDefinitionFormationMap()
    {
        Id(x => x.ID);
        References(x => x.isRevisionOf).UniqueKey(\"Product_Revision\").Not.Nullable();
        Map(x => x.revision).UniqueKey(\"Product_Revision\").Not.Nullable();

}

}
我现在得到的是ProductRevision表中的多余列\“ Product_Id \”。我通过用hasMany()和references()在双方定义关系来弄错了。 通常,我不会定义References(...)映射,但是我需要它来用于uniquekey约束,不是吗? 谢谢, 埃里克     
已邀请:
这是双向的一对多关系,映射可能看起来像这样:
public ProductMap()
{
    Id(x => x.ID).Column(\"ProductNo\");
    HasMany(x => x.revisions)
        .KeyColumn(\"ProductId\") // the name of the FK column in ProductRevision table
        .Inverse() // bi-directional relation
        .Cascade.All();
}

public ProductRevisionMap()
{
    Id(x => x.ID);
    References(x => x.isRevisionOf)
        .Column(\"ProductId\") // column name must match the name specified in Product HasMany
        .UniqueKey(\"Product_Revision\")
        .Not.Nullable();
    Map(x => x.revision).UniqueKey(\"Product_Revision\").Not.Nullable();
}
Inverse和KeyColumn是此难题的缺失部分。 此映射会在数据库中生成所需的约束,但是您仍然需要在业务逻辑中检查此约束,否则,如果将具有重复名称的修订插入修订集合中,则会出现SqlException。     

要回复问题请先登录注册