我正在使 Fluent NHibernate 适应我们现有的遗留应用程序,并尝试确定如何将 ClassMap 和 SubclassMap 用于所示的实体层次结构。
// BaseObject contains database columns common to every table
public class BaseObject
{
// does NOT contain database id column
public string CommonDbCol1 { get; set; }
public string CommonDbCol2 { get; set; }
// ...
}
public class Entity1 : BaseObject
{
public int Entity1Id { get; set; }
// other Entity1 properties
}
public class Entity2 : BaseObject
{
public int Entity2Id { get; set; }
// other Entity2 properties
}
Entity1 和 Entity2 的标识列按每个表进行唯一命名。 BaseObject 包含所有实体共有的列。我没有使用 AutoMapping,并且认为我可以在 BaseObject 上使用 ClassMap,然后在每个实体上使用 SubclassMap,如下所示:
public class Entity1Map : SubclassMap<Entity1>
{
public Entity1Map()
{
Id(x => x.Entity1Id);
// ...
}
}
问题是,没有为 SubclassMap 定义 Id()。那么,我如何在每个 Entity1Map、Entity2Map...(我们有 100 多个实体类全部继承自 BaseObject)中指定实体特定的 Id 是什么?
预先感谢您的任何见解!
在 Fluent NHibernate 或 NHibernate 中都不可能做到这一点。您实际上希望您的类映射为子类,还是只是希望它们共享公共映射?如果您确实想要子类,那么您将需要让它们共享标识列,没有其他办法;如果您不需要实际的子类,请创建一个抽象ClassMap<T> where T : BaseObject
并映射其中的公共属性。
就像是:
public abstract class BaseObjectMap<T> : ClassMap<T> where T : BaseObject
{
public BaseObjectMap()
{
Map(x => x.CommonProperty1);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)