Свободный NHibernat - запрос enum поля с помощью LINQ - PullRequest
1 голос
/ 25 сентября 2010

Мое приложение имеет следующую структуру базы данных:

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

TransactionTypes:
- TypeID (PK, Identity, Int)
- Type (NVarChar)

Они определены в моей заявке как:

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

public enum TransactionTypes
{
    Event = 1,
    Product = 2
}

Со следующим отображением:

public class TransactionMap : ClassMap<Transaction>
{
    public TransactionMap()
    {
        Table("Transactions");
        Id(x => x.TransactionID);
        Map(x => x.Type, "TypeID").CustomType<int>();
        Map(x => x.Amount);
    }
}

Все отлично работает, кроме запросов. Когда я пытаюсь сделать:

session.Linq<Transaction>().Where(t => t.Type == TransactionTypes.Event).ToList();

Выдает ошибку «Несоответствие типов в NHibernate.Criterion.SimpleExpression: тип ожидаемый тип System.Int32, фактический тип Entities.TransactionTypes».

Буду признателен, если кто-нибудь покажет мне правильный способ сопоставить это. Спасибо

1 Ответ

3 голосов
/ 26 сентября 2010

Лучший способ отобразить перечисления в Fluent NHibernate - использовать соглашения. Смотрите эти две темы для справки:

Отображение перечисления с беглым nhibernate

Как отобразить перечисление как значение int с помощью беглого NHibernate?

...