Castle ActiveRecord - 模式生成而不强制参照完整性?

时间:2010-04-27 23:41:41

标签: c# nhibernate castle-activerecord

我刚开始玩Castle活跃唱片,因为它似乎是一种温和的NHibernate方式。我非常喜欢在开发过程中从我的类生成数据库模式的想法。

我想做类似以下的事情:

[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;}

}

相机包应包含任意数量的三脚架和相机。相机套件独立于相机和三脚架,但有时相关。

问题是,如果我使用createschema,这会将外键约束放在Camera和Tripod表上。我不希望这样,我希望能够在三脚架和相机表上将CamKitId设置为null,以表明它不是CameraKit的一部分。

有没有办法告诉activerecord / nhibernate仍然认为它是相关的,而不强制完整性?我以为我可以在那里有一个cameraKit记录来表示“没有相机套件”,但它看起来像是oeverkill。

或者我的架构错了? 我在做一些我不应该用ORM做的事情吗? (我没有真正使用ORM)

谢谢!

1 个答案:

答案 0 :(得分: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;}
}

这样,你可以将Camera的CamKit设置为null,表示“没有相机套件”。

请参阅http://www.castleproject.org/activerecord/documentation/trunk/usersguide/relations/belongsto.html以供参考。