【发布时间】:2015-11-24 04:27:55
【问题描述】:
我正在将 Castle ActiveRecord 连接到旧数据库,但在连接一对多关系时遇到了麻烦。问题是外键没有引用另一个表的主键,它使用了另一个列。
这些是表格(为清楚起见已缩短):
CREATE TABLE [Rule](
[ID] [uniqueidentifier] NOT NULL,
[HeadingID] [int] NULL
)
CREATE TABLE [Heading](
[ID] [uniqueidentifier] NOT NULL,
[ID2] [int] NOT NULL
)
Rule 表中的 HeadingID 字段是一个外键,它引用 Heading 中的 ID2 字段。
所以,在 Rule 类的定义中我有:
[BelongsTo(Column = "HeadingID", PropertyRef = "OrderID")]
public virtual Heading Heading { get; set; }
这似乎工作正常,我可以毫无问题地访问规则的标题(当然,如果我将 HasMany 设置为惰性)。
在 Heading 类定义中我有:
[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 属性。有没有办法做到这一点?
【问题讨论】: