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