Oracle Database mapping with Nhibernate (C#)(数据库不包含PK)
Oracle Database mapping with Nhibernate (C#)(database does not contain PK)
我有一个巨大的 Oracle 数据库,其中包含超过 1000 个表。其中一些没有PK(主键)。我想在 C# 和 Oracle 数据库之间实现 Nhibernate,但由于主键,它不允许我进行映射。有什么解决办法吗?请帮我解决这个问题。
NHibernate 不关心在数据库中有一个实际的主键。
在您的映射中声明 'logically' 每个实体的主键就足够了。
如果您有一些表没有具有唯一值的列的任何组合,处理这些表将更加困难。
如果您使用某些第三方工具从数据库生成映射和 类,最好忘记它并编写您自己的映射和 类。这些工具可能会从 'well shaped' 数据库生成一个像样的映射,但对于不遵循常见做法的遗留数据库却非常无助。
即使在 'good' 数据库上,使用一些工具生成映射和模型通常也不是那么好,因为您的域模型不必与您的数据库精确匹配。工具会直接将数据库模式转换为域模型,同时编写它允许根据应用程序的实际需求自定义模型。 (为子集合或实体定义过滤器,定义继承模型,不映射不需要的列或关系,实体和实体的属性名称与其对应的表和列不同,设置缓存策略,用于批量延迟加载的批量大小属性,...... )
我有一个巨大的 Oracle 数据库,其中包含超过 1000 个表。其中一些没有PK(主键)。我想在 C# 和 Oracle 数据库之间实现 Nhibernate,但由于主键,它不允许我进行映射。有什么解决办法吗?请帮我解决这个问题。
NHibernate 不关心在数据库中有一个实际的主键。
在您的映射中声明 'logically' 每个实体的主键就足够了。
如果您有一些表没有具有唯一值的列的任何组合,处理这些表将更加困难。
如果您使用某些第三方工具从数据库生成映射和 类,最好忘记它并编写您自己的映射和 类。这些工具可能会从 'well shaped' 数据库生成一个像样的映射,但对于不遵循常见做法的遗留数据库却非常无助。
即使在 'good' 数据库上,使用一些工具生成映射和模型通常也不是那么好,因为您的域模型不必与您的数据库精确匹配。工具会直接将数据库模式转换为域模型,同时编写它允许根据应用程序的实际需求自定义模型。 (为子集合或实体定义过滤器,定义继承模型,不映射不需要的列或关系,实体和实体的属性名称与其对应的表和列不同,设置缓存策略,用于批量延迟加载的批量大小属性,...... )