2010-04-27 53 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