我正在将Castle ActiveRecord连接到旧数据库,而我在连接一对多关系时遇到问题。问题是外键不引用另一个表的主键,它使用另一个列。
这些是表格(为清楚起见缩短了):
CREATE TABLE [Rule](
[ID] [uniqueidentifier] NOT NULL,
[HeadingID] [int] NULL
)
CREATE TABLE [Heading](
[ID] [uniqueidentifier] NOT NULL,
[ID2] [int] NOT NULL
)
规则表中的HeadingID字段是引用标题中的ID2字段的外键。
所以,在规则类的定义中我有:
[BelongsTo(Column = "HeadingID", PropertyRef = "OrderID")]
public virtual Heading Heading { get; set; }
这似乎工作正常,我可以毫无问题地访问规则标题(如果我当然设置了HasMany懒惰)。
在标题类定义中,我有:
[HasMany(Lazy = true)]
public IList<Rule> Rules { get; set; }
当我访问集合时,我得到一个SQL异常“操作数类型冲突:uniqueidentifier与int不兼容。” 看起来AR正在尝试做这样的选择(为了清晰起见而简化):
SELECT ... FROM Rule rules0_ ... WHERE rules0_.HeadingID = ?
在哪里?是来自Heading.ID的GUID(它应该是来自Heading.ID2的int)。
我找不到HasMany的属性,它允许我设置外键引用的列。有没有办法做到这一点?
答案 0 :(得分:0)
似乎无法做到这一点。我能做的最好的是自定义查找:
public virtual IEnumerable<Rule> Rules {
get {
return Rule.Queryable.Where(x => x.Heading == this);
}
}
这对我来说效果很好。