在与NHibernate一起使用union子类时,是否必须为抽象和无表基类指定表?
我们有一个BaseEntity,所有其他域类都继承它。在此BaseEntity上有一些基本属性。例如,这可能类似于在与NHibernate一起使用union子类时,是否必须为抽象和无表基类指定表?,nhibernate,inheritance,nhibernate-mapping,Nhibernate,Inheritance,Nhibernate Mapping,我们有一个BaseEntity,所有其他域类都继承它。在此BaseEntity上有一些基本属性。例如,这可能类似于DateLastChange 我们将NHibernate与hbm映射文件一起使用。我试图避免在每个映射文件中映射DateLastChange 我发现了Ayende,这让我相信我可以使用联合子类来实现这一点(参见他最后的方法)。但是,他为抽象类包含了一个表名,而这个表名不在他的表模式中 <class name="Party" abstract="true" tab
DateLastChange
我们将NHibernate与hbm
映射文件一起使用。我试图避免在每个映射文件中映射DateLastChange
我发现了Ayende,这让我相信我可以使用联合子类来实现这一点(参见他最后的方法)。但是,他为抽象类包含了一个表名,而这个表名不在他的表模式中
<class name="Party"
abstract="true"
table="Parties">
...
...
表是否必须存在,或者NHibernate是否会忽略此属性?然后我可以省略它吗?我有以下fluentnhibernate中的抽象类:
public abstract class EntityMapping<TEntity> : ClassMap<TEntity> where TEntity : EntityBase
{
protected EntityMapping()
{
Id(x => x.Id, "Id")
.UnsavedValue("00000000-0000-0000-0000-000000000000")
.GeneratedBy.GuidComb()
.Index("IX_Lookup");
OptimisticLock.Version();
Version(x => x.Version);
Map(x=>x.DateLastChange); // your column
}
}
公共抽象类EntityMapping:ClassMap,其中tenty:EntityBase
{
受保护的EntityMapping()
{
Id(x=>x.Id,“Id”)
.UnsavedValue(“00000000-0000-0000-0000-000000000000”)
.GeneratedBy.GuidComb()
.索引(“IX_查找”);
OptimisticLock.Version();
版本(x=>x.Version);
Map(x=>x.DateLastChange);//您的列
}
}
所有其他映射都使用抽象类:
public SomeEntityMap:EntityMapping<SomeEntity>{
public SomeEntityMap(){
Map(x=>x.SomeProperty);
}
}
公共SomeEntityMap:EntityMapping{
公共SomeEntityMap(){
Map(x=>x.SomeProperty);
}
}
这是不需要的。根据(感谢kalki):
...
...
...
...
以及:
如果您的超类是抽象的,请使用abstract=“true”映射它。如果是
不是抽象的,是一个附加表(默认为
上面的示例中),需要保存超类的实例
对不起,我看不出这对我有什么帮助。我专门寻找一个使用union子类和hbm.xml文件的解决方案。我还想使用一种特定的继承方法。千万不要阅读问题中的hbm部分。奇怪的是,为什么你仍然使用hbm文件,同时使用fluent和confORM AvailableType PO。退房
<class name="Payment">
<id name="id" type="long" column="PAYMENT_ID">
<generator class="sequence"/>
</id>
<property name="amount" column="AMOUNT"/>
...
<union-subclass name="CreditCardPayment" table="CREDIT_PAYMENT">
<property name="creditCardType" column="CCTYPE"/>
...
</union-subclass>
<union-subclass name="CashPayment" table="CASH_PAYMENT">
...
</union-subclass>
<union-subclass name="ChequePayment" table="CHEQUE_PAYMENT">
...
</union-subclass>
</class>