不使用主键的Castle ActiveRecord关系

时间:2011-05-06 20:07:43

标签: castle-activerecord

我正在将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的属性,它允许我设置外键引用的列。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

似乎无法做到这一点。我能做的最好的是自定义查找:

public virtual IEnumerable<Rule> Rules {
    get {
        return Rule.Queryable.Where(x => x.Heading == this);
    }
}

这对我来说效果很好。