大家好!
在NH的说明文档中,说到:
If the name attribute is missing, it is assumed that the class has no identifier property.
但是如果没有name属性的话,只有加载可以,删除将不会执行。
有时我的数据库表为了删除快,就用了一个int类型的id字段,但我不想让这个id字段体现在对应的领域对象中,也就是说在我相应的领域对象中没有id属性,但这么一来,就没有办法用NHibernate的Delete来删除它,比如我有one-to-one的映射:
表有两个:User和PersonalField,主键分别为id和uId,后者的主键uId同时也是外键,参考User表的id字段。
User.hbm.xml:
PersonalField.hbm.xml:
我的User类有只读的Id属性,而PersonalField没有uID属性,也没有uID字段,User和PersonalField双向关联。
这样的话,加载没有问题,但删除和更新会出错。在删除User的时候(ISession.Delete(user)),NHibernate只会生成一句删除User表的sql语句(delete from [User] where ...),这样就会违反外键约束而报错(因为没有先删除PersonalField中的记录)。
如果我在PersonalField中加个uID字段,并在映射文件中设置access="field",就可以删除和更新,但问题是,PersonalField已经有一个User属性了,所以我不想再在PersonalField中写个没太大意义的uID属性(uID和User.Id是相等的)。所以想请教一下大家,有没有什么办法让我既不用在PersonalField中加上uID字段,又可以实现级联删除?
小弟不 才, 只知道 2005 中可以设置 级联删除
不知可否帮上