使用 Fluent NHibernate 对复合键的问题映射参考

Problem mapping reference to composite key with Fluent NHibernate

我找不到用 Fluent NHibernate 映射它的方法。

我的 class 定义是这样的-我将省略 Equals 和 GetHash 部分-:

public class ClassA
{
    public virtual int Id { get; set; }
}
public class ClassB
{
    public virtual int Id { get; set; }
    public virtual ClassA ClassA { get; set; }
    public virtual ICollection<ClassC> ClassCCollection { get; set; }
}
public class ClassC
{
    public virtual int Id { get; set; }
    public virtual ClassB ClassB { get; set; }
}

还有我的映射构造函数:

public ClassAMap()
{
    Table("ClassA");
    Id(c => c.Id);
}
public ClassBMap()
{
    Table("ClassB");
    CompositeId()
        .KeyProperty(c => c.Id)
        .KeyReference(c => c.ClassA, "ClassAId")
        .KeyProperty(c => c.Version);
    HasMany(c => c.Edges)
        .Inverse()
        .Cascade.All().AsList().KeyColumns.Add("ClassBId", "ClassAId", "Version");
}
public ClassCMap()
{
    Table("ClassC");
    Id(c => c.Id);
    References(n => n.ClassB).Columns("ClassBId, ClassAId, Version").Not.Nullable();
}

但是当我尝试启动应用程序时,SchemaUpdate 说

FKUnmatchingColumnsException: Foreign key (FK_6C7456E0:ClassC [ClassBId, ClassAId, Version])) must have same number of columns as the referenced primary key (ClassB [Id, ClassAId, Version])

也许我数学不太好,但似乎 3 列的列数与 3 列的列数相同。我错过了什么吗? 谢谢

非常愚蠢的错误:

我在写

References(n => n.ClassB).Columns("ClassBId, ClassAId, Version").Not.Nullable();

将三列放在同一个字符串中。应该是:

References(n => n.ClassB).Columns("ClassBId", "ClassAId", "Version").Not.Nullable();

一个让我卡了两天的失误。