我知道 Orchard 中使用的底层 ORM 是 NHibernate,它确实支持所谓的ClassMapping
可能有助于按照我们想要的方式自定义映射。
但是我不确定 Orchard 如何利用 NHibernate 支持的映射方法。在这种情况下,它似乎总是使用类似于Table Per Type
EF 以及其他一些 ORM 的策略。使用该策略,基类将映射到某个公用表,而派生类将映射到另一个表,该表包含其自己的所有属性(未在基类中声明)。这两个表将具有一对一的关系。
现在我真的想让它使用类似于Table Per Concrete Type
将基类和派生类映射到两个不同的表的策略,其中所有属性(包括继承的属性)都映射到列。这 2 个表不会有任何关系,因此仅在一个表中查询列不会意外生成内部 JOIN(针对一对一关系)。
实际上,如果我们只需要对数据进行分区(从 1 个大表到 2 个或更多具有相同架构的小表),这个要求是有意义的。我们不想重新声明或使用某种重复的模型类(具有不同的名称),相反,我们只需要创建一个新的模型类并让它从一个包含所有必要属性的基本模型类继承。
使用这样的当前代码:
public class ARecord {
//properties ...
}
public class BRecord : ARecord {
//empty here
}
目前我们不能使用BRecord
,因为它被理解为 的另一部分ARecord
,自动生成的查询(总是使用 INNER JOIN)会因为某些不存在的表或列名而失败。
我该如何解决这个问题?