ken*_*dev 3 nhibernate orm fluent-nhibernate
我正在调整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
}
Run Code Online (Sandbox Code Playgroud)
Entity1和Entity2的标识列按表唯一命名.BaseObject包含所有实体共有的列.我没有使用AutoMapping,并且认为我可以在BaseObject上使用ClassMap,然后在每个Entity上使用SubclassMap,如下所示:
public class Entity1Map : SubclassMap<Entity1>
{
public Entity1Map()
{
Id(x => x.Entity1Id);
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,没有为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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2696 次 |
| 最近记录: |