使用Fluent NHibernate映射父表和子表

使用Fluent NHibernate映射父表和子表,nhibernate,fluent-nhibernate,nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,Hi在我的数据库中定义了以下表: Transactions: - TransactionID (PK, Identity) - TypeID (FK) - Amount TransactionTypes: - TypeID (PK, Identity) - Type ProductTransactions: - TransactionID (PK) - Discount 有两种类型的事务(事件和产品)。产品具有附加折扣字段,因此定义了附加表 我现在拥有以下实体: public class

Hi在我的数据库中定义了以下表:

Transactions:
- TransactionID (PK, Identity)
- TypeID (FK)
- Amount

TransactionTypes:
- TypeID (PK, Identity)
- Type

ProductTransactions:
- TransactionID (PK)
- Discount
有两种类型的事务(事件和产品)。产品具有附加折扣字段,因此定义了附加表

我现在拥有以下实体:

public class Transaction
{
    public virtual int TransactionID { get; private set; }
    public virtual TransactionType Type { get; set; }
    public virtual decimal Amount { get; set; }
}

public class ProductTransaction : Transaction
{
    public virtual decimal Discount { get; set; }
}

public enum TransactionType
{
    Event = 1,
    Product = 1
}
最后,我的映射如下所示:

public TransactionMap()
{
    Table("Transactions");
    Id(x => x.TransactionID);
    Map(x => x.Amount);
    DiscriminateSubClassesOnColumn("TypeID")
        .SubClass<ProductTransaction>(TransactionType.Product, x => x.References(y => y.Type));
}

public ProductTransactionMap()
{
    Table("ProductTransactions");
    Map(x => x.Discount);
}

但是,我的映射有问题。我肯定我的问题是围绕着区分子类的列位,但我有点不知道该放在这里什么。如果有人能告诉我如何做到这一点,我将不胜感激。谢谢

我不使用fluent,但字段不能既是鉴别器又是映射属性


由于您使用的是继承(
ProductTransaction
is-a
Transaction
),因此可以删除属性(
Transaction
has-a
TransactionType
)。

嗨,干杯,看来我把事情复杂化了一点。现在一切都好了。
productRepository.Insert(new ProductTransaction { Type = TransactionType.Product, Amount = 100m, Discount = 10m });