[英]Problem mapping reference to composite key with Fluent NHibernate
我没有找到用 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.