对象A
具有一对多关联:许多对象B
。
当我查看数据库时 - TableB
- 我希望看到唯一的,可读的字符串A.Name
,而不是总是在代理整数标识符上加入或子选择以查看名。
我可以将Name
映射为A
的标识符,但这会导致大量额外的SELECT
查询,因为NHibernate无法识别A
的实例是否是瞬态的或持久的。
我想我可以使用复合键,将原生指定的代理键与自然键组合在一起。这似乎不太理想,但我很乐意听到一些意见。
我真正想要的是使用单列自然键同时允许NHibernate识别瞬态实例的策略。
另一方面,如果这是一个可怕的想法,我应该只依靠带有子选择的数据库视图,请解释。
感谢。
答案 0 :(得分:1)
这是一个糟糕的主意,您应该创建一个视图,在需要“查看数据库”时为这些情况进行连接。
这是一个可怕的想法,因为Name不是表A的主键。
但是我认为如果你对A.Name设置一个唯一约束并将其映射为标识符,你就可以这样做。我不确定NHibernate默认为null或为未保存的值清空字符串,但您可以使用
指定它Id(x => x.Name).GeneratedBy.Assigned().UnsavedValue(string.Empty); // or null
如果使用string.Empty而不是A的构造函数必须将Name初始化为string.Empty。我也会从A中删除代理标识符,也可能是表格本身,因为它没有用处。