Сопоставление родительских и дочерних таблиц с помощью гибкого NHibernate - PullRequest
1 голос
/ 05 августа 2010

Здравствуйте, в моей базе данных определены следующие таблицы:

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

TransactionTypes:
- TypeID (PK, Identity)
- Type

ProductTransactions:
- TransactionID (PK)
- Discount

Существует 2 типа транзакций (События и Продукты). У продуктов есть дополнительное поле Скидка, поэтому определяется дополнительная таблица.

Теперь у меня есть следующие объекты:

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 голосов
/ 05 августа 2010

Я не использую бегло, но поле не может быть одновременно дискриминатором и отображенным свойством.

Поскольку вы используете наследование (ProductTransaction is-a Transaction), вы можете удалить свойство (Transaction has-a TransactionType).

...