我确实拥有超过1000个表的巨型Oracle数据库。其中一些没有PK(主键)。我想在C#和Oracle数据库之间实现Nhibernate,但它不允许我因为主键而允许进行映射。这有什么解决方案吗?请帮我解决这个问题。
答案 0 :(得分:2)
NHibernate并不关心DB中是否有实际的主键。
在您的映射中声明每个实体的“逻辑”主键是足够的。
如果您的某些表没有任何具有唯一值的列组合,那么处理这些表将会更难。
如果您使用某些第三方工具从DB生成映射和类,最好忘记它并编写自己的映射和类。这样的工具可以从“形状良好”的数据库中生成一个不错的映射,但是对于没有遵循常规实践的传统数据库则非常无助。
即使在'好'数据库中,使用一些工具生成映射和模型通常也不是那么好,因为您的域模型不必精确匹配您的数据库。工具将直接将数据库架构转换为域模型,而编写它可以根据应用程序的实际需要自定义模型。 (为子集合或实体定义过滤器,定义继承模型,不映射不需要的列或关系,使实体和实体的属性名称与其对应的表和列不同,设置缓存策略,批处理延迟加载的批量大小属性,... )