流畅的NHibernate - 使用LINQ查询enum字段

时间:2010-09-25 10:15:10

标签: fluent-nhibernate linq-to-nhibernate

我的应用程序具有以下数据库结构:

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 个答案:

答案 0 :(得分:3)

在Fluent NHibernate中映射枚举的最佳方法是使用约定。请参阅以下两个主题寻求帮助:

Mapping enum with fluent nhibernate

How do you map an enum as an int value with fluent NHibernate?