fluent nhibernate字符串到枚举选择查询示例

本文关键字:查询 选择 枚举 nhibernate 字符串 fluent | 更新日期: 2023-09-27 18:21:44

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

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

2) query for the entity where EnumField = value1

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

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`** 
        }
    }
}

到目前为止,我看到的东西只涉及一个通用的save命令,我还没有找到任何查询示例

fluent nhibernate字符串到枚举选择查询示例

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

NHibernate(不带Fluent NH)默认情况下将枚举持久化为intFluent NH通过将GenericEnumMapper<TEnum>类型应用于属性映射来更改此行为(请参阅代码)。

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

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