我刚开始玩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)
谢谢!
答案 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以供参考。