2010-04-27 54 views
0

我剛開始玩Castle活動記錄,因爲它看起來像一個溫和的方式進入NHibernate。我非常喜歡在開發過程中從我的類中生成數據庫模式的想法。Castle ActiveRecord - 不執行參照完整性的模式生成?

我想要做類似如下的內容:

[ActiveRecord] 
public class Camera : ActiveRecordBase<Camera> 
{ 
    [PrimaryKey] 
    public int CameraId {get; set;} 
    [Property] 
    public int CamKitId {get; set;} 
    [Property] 
    public string serialNo {get; set;} 
} 

[ActiveRecord] 
public class Tripod : ActiveRecordBase<Tripod> 
{ 
    [PrimaryKey] 
    public int TripodId {get; set;} 
    [Property] 
    public int CamKitId {get; set;} 
    [Property] 
    public string serialNo {get; set;} 
} 

[ActiveRecord] 
public class CameraKit : ActiveRecordBase<CameraKit> 
{ 
    [PrimaryKey] 
    public int CamKitId {get; set;} 
    [Property] 
    public string description {get; set;} 
    [HasMany(Inverse=true, Table="Cameras", ColumnKey="CamKitId")] 
    public IList<Camera> Cameras {get; set;} 
    [HasMany(Inverse=true, Table="Tripods", ColumnKey="CamKitId")] 
    public IList<Camera> Tripods {get; set;} 

} 

一個camerakit應該包含任何數量的三腳架和相機。相機套件獨立於相機和三腳架存在,但有時相關。

問題是,如果我使用createscheche,這將把相機和三腳架表上的外鍵約束。我不想要這個,我想能夠在三腳架和相機表上設置CamKitId爲null,以表明它不是CameraKit的一部分。

有沒有辦法告訴activerecord/nhibernate仍然認爲它是相關的,而不強制完整性?我想我可以在那裏有一個cameraKit記錄來表示「沒有相機套件」,但它看起來像oeverkill。

或者是我的模式錯了? 我在做什麼,我不應該與一個ORM? (我還沒有真正使用過ORMs)

謝謝!

回答

3

使用[BelongsTo]到多到一個關係模式,例如:

[ActiveRecord] 
public class Camera : ActiveRecordBase<Camera> 
{ 
    [PrimaryKey] 
    public int CameraId {get; set;} 

    [BelongsTo] 
    public CameraKit CamKit {get; set;} 

    [Property] 
    public string serialNo {get; set;} 
} 

這樣,你就可以設置相機的CamKit爲null,表明「沒有攝像頭套件」。

參見http://www.castleproject.org/activerecord/documentation/trunk/usersguide/relations/belongsto.html以供參考。

+0

啊!我懂了。我確實看過屬於自己,但出於某種原因,我認爲它和我的例子中的hasmany一樣,但是相反。我現在覺得自己有點白癡;) 謝謝Mauricio! – Simon 2010-04-28 05:40:42