繁体   English   中英

使用 Fluent NHibernate 映射引用到复合键的问题

[英]Problem mapping reference to composite key with Fluent NHibernate

  • 我有一个名为...“ClassA”的类,它有一个 int ID 作为主键。
  • 我有一个名为“ClassB”的类,它有一个复合主键,它由一个 Id、一个 ClassAid 和另一个名为 Version 的 int 组成,后者是对 ClassA 的引用。
  • 我有一个名为 C 的类,它有一个 int ID 作为主键,还有一个 ClassB 的外键,由 ClassBId、ClassAId 和 Version 组成。

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

我的类定义是这样的——我将省略 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:外键 (FK_6C7456E0:ClassC [ClassBId, ClassAId, Version])) 必须与引用的主键 (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();

一个让我卡住了两天的 lapsus。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM