关于c#:fluent nhibernate string to enum select query example

fluent nhibernate string to enum select query example

我正在使用流利的 nhibernate。我有一个存储字符串 VALUE1VALUE2 的数据库列。获取时需要将它们转换为枚举值。
基本上,我想不通:-

1) 这个枚举需要做什么,以便 nhibernate 理解并可以将字符串行转换为它们各自的枚举值。
(如果 enumString ?那么如何使用?/其他建议)

2) query for the entity where EnumField = value1

这是为问题创建上下文的代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public enum SomeEnum
{
    Value1,
    Value2
}

class EntityMap : ClassMap<Entity>
{
    public EntityMap()
    {
        Id(x => x.id);
        Map(x => x.EnumField);
    }
}

class Program
{
    static void Main(string[] args)
    {
        var factory = Fluently.Configure().Mappings(x => x.FluentMappings.AddFromAssemblyOf<Entity>())
                                .ExposeConfiguration(config => new SchemaExport(config).Create(false, true))
                                .Database(MsSqlConfiguration.MsSql2008.ConnectionString("Data Source=.;Initial Catalog=nhtest;Integrated Security=True"))
                                .BuildSessionFactory();
        using (var session = factory.OpenSession())
        {
             **need a way to query for all `Value1`**
        }

    }
}

到目前为止,我看到的东西只处理通用的保存命令,我还没有找到任何查询示例


由于您使用的是 Fluent NHibernate,因此这项工作已经为您完成。将枚举持久化为字符串是 Fluent NHibernate 的默认行为。

NHibernate(没有 Fluent NH)默认将枚举保存为整数。 Fluent NH 通过将 GenericEnumMapper<TEnum> 类型应用于属性映射来更改此行为(请参阅代码)。

由于指定映射的问题已经由 Fluent NH 处理,您的代码的其余部分可以放心地忽略它作为字符串存储在数据库中的事实。例如:

1
2
3
var result = session.Query<Entity>()
    .Where(x => x.EnumField == SomeEnum.Value1)
    .ToList();