Castle ActiveRecord - schema generation without enforcing referential integrity?

Posted by Simon on Stack Overflow See other posts from Stack Overflow or by Simon
Published on 2010-04-27T23:41:41Z Indexed on 2010/04/27 23:43 UTC
Read the original article Hit count: 378

Hi all, I've just started playing with Castle active record as it seems like a gentle way into NHibernate. I really like the idea of the database schema being generate from my classes during development.

I want to do something similar to the following:

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

}

A camerakit should contain any number of tripods and cameras. Camera kits exist independently of cameras and tripods, but are sometimes related.

The problem is, if I use createschema, this will put foreign key constraints on the Camera and Tripod tables. I don't want this, I want to be able to to set CamKitId to null on the tripod and camera tables to indicate that it is not part of a CameraKit.

Is there a way to tell activerecord/nhibernate to still see it as related, without enforcing the integrity? I was thinking I could have a cameraKit record in there to indicate "no camera kit", but it seems like oeverkill.

Or is my schema wrong? Am I doing something I shouldn't with an ORM? (I've not really used ORMs much)

Thanks!

© Stack Overflow or respective owner

Related posts about nhibernate

Related posts about castle-activerecord