使用Fluent NHibernate映射父表和子表

时间:2010-08-05 16:59:10

标签: nhibernate fluent-nhibernate nhibernate-mapping

您的数据库中定义了以下表格:

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);
}

我希望能够说出以下内容来插入产品交易:

productRepository.Insert(new ProductTransaction { Type = TransactionType.Product, Amount = 100m, Discount = 10m });

但是我的映射有问题。我确定我的问题围绕着DiscriminateSubClassesOnColumn位,但我很遗憾放在这里。如果有人能告诉我如何做到这一点,我真的很感激。感谢

1 个答案:

答案 0 :(得分:0)

我不使用流利,但字段不能同时是鉴别器和映射属性。

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