2011-05-06 64 views
0

我正在將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例外「操作數類型衝突:唯一標識符是與詮釋不兼容。」 它看起來像AR試圖做一個選擇這樣的(爲了清楚而簡化):

SELECT ... FROM Rule rules0_ ... WHERE rules0_.HeadingID = ? 

在哪裏?是Heading.ID的GUID(它應該是來自Heading.ID2的int)。

我找不到HasMany的一個屬性,它允許我設置外鍵引用的列。有沒有辦法做到這一點?

回答

0

看來,這是不能做到的。我能做的最好的是自定義查找:

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

這對我來說已經夠用了。