【发布时间】:2016-01-11 04:03:09
【问题描述】:
我正在尝试映射这些类:
public interface IBusinessObject
{
Guid Id { get; set; }
}
public class Product
{
public virtual Guid Id { get; set; }
public virtual int ProductTypeId { get; set; }
}
public class ProductWeSell : Product, IBusinessObject
{
}
public class ProductWeDontSell : Product
{
}
到有 2 个表的数据库:
[BusinessObject] COLUMNS ([Id])
[Product] COLUMNS ([Id], [ProdyctTypeId])
我想对 BusinessObject 使用 Type-Per-Class,对 Product 使用 Type-Per-Hierarchy。这应该会导致这种行为:
- 添加产品:插入产品 {Guid),null}
- 添加 ProductWeDontSell:插入产品 {Guid, 2}
- 添加 ProductWeSell:INSERT INTO BusinessObject {Guid};插入产品 {SameGuid, 1}
逻辑上 hbm 映射应该是:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class xmlns="urn:nhibernate-mapping-2.2" name="IBusinessObject" table="BusinessObject">
<joined-subclass name="ProductWeSell" table="Product"/>
</class>
</hibernate-mapping>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class xmlns="urn:nhibernate-mapping-2.2" discriminator-value="null" name="Product" table="Product">
<discriminator type="String">
<column name="ProductTypeId" not-null="false" />
</discriminator>
<subclass name="ProductWeDontSell" discriminator-value="2" />
<subclass name="ProductWeSell" discriminator-value="1" />
</class>
</hibernate-mapping>
但我收到 {"Duplicate class/entity mapping ProductWeSell"} 错误。
【问题讨论】:
-
我自己刚刚学习这个,你有没有研究过 IMappingOverride 可以做的所有事情? wiki.fluentnhibernate.org/Auto_mapping
-
@kenny,不,我从未听说过 IMappingOverride,但我知道有 IAutoMappingOverride,但我不使用自动映射。
-
是的,我的错,IAutoMappingOverride。祝你好运。
-
我认为你不能像这样混合继承策略。看看这个:stackoverflow.com/questions/2715701/…
-
另一个可以解释这个问题的地方是:nhforge.org/blogs/nhibernate/archive/2011/02/16/…。我认为您将不得不使用抽象基类或根本不这样做。
标签: c# nhibernate nhibernate-mapping