2010-06-24 55 views
1

我使用「類表繼承 - 使用加入了子類」如下所述: http://www.castleproject.org/activerecord/documentation/trunk/usersguide/typehierarchy.html城堡的ActiveRecord JoinedKey未設置

下面的代碼部分是從那裏複製。

[ActiveRecord("entity"), JoinedBase] 
public class Entity : ActiveRecordBase 
{ 
    ... 
    private int id; 

    [PrimaryKey] 
    private int Id 
    { 
     get { return id; } 
     set { id = value; } 
    } 
} 

[ActiveRecord("entitycompany")] 
public class CompanyEntity : Entity 
{ 
    private int comp_id; 

    [JoinedKey("comp_id")] 
    public int CompId 
    { 
     get { return comp_id; } 
     set { comp_id = value; } 
    } 
    .... 
} 

現在,當我有加載CompanyEntity和訪問ComId屬性是始終爲0,但繼承的id屬性包含正確的值。

編輯:

我也許應該補充一點,我們的實體會自動生成,我不想碰發電機。

EDIT2:

好吧,我知道我必須觸摸發電機,以使其發揮作用。但仍然爲什麼不是Active Record設置Comp_id?

問:

我怎麼能告訴ActiveRecord的也設置JoinedKey的價值在子類中,這樣CompId ==標識?

回答

0

我認爲你需要使用:

[JoinedKey("comp_id")] 
public override int Id { get { return base.Id; } } 

...,他們給的例子是錯誤的。

0

這是一個相當古老的問題,但我遇到了同樣的問題。 Castle.ActiveRecord頁面上的示例是錯誤的。

可以解決這樣的問題(帶有註釋的修改你的代碼示例):

[ActiveRecord("entity"), JoinedBase] 
public class Entity : ActiveRecordBase 
{ 
    ... 
    protected int id; // use protected instead of private 

    [PrimaryKey] 
    private int Id 
    { 
     get { return id; } 
     set { id = value; } 
    } 
} 

[ActiveRecord("entitycompany")] 
public class CompanyEntity : Entity 
{ 
    // private int comp_id; // this member variable is not required 

    [JoinedKey("comp_id")] 
    public int CompId 
    { 
     get { return id; } // access the member variable of the base class 
     set { id = value; } // access the member variable of the base class 
    } 
    .... 
} 

我剛剛成功地與我喜歡的類型層次結構進行了測試。

相關問題