c# - 流畅的 nhibernate 字符串到枚举选择查询示例

标签 c# nhibernate enums fluent-nhibernate queryover

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

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

2) 查询 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`** 
        }

    }
}

到目前为止,我所看到的内容仅涉及通用保存命令,我还没有找到任何查询示例

最佳答案

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

NHibernate(没有 Fluent NH)默认将枚举保留为整数。 Fluent NH 通过应用 GenericEnumMapper<TEnum> 更改此行为键入属性映射(请参阅 code )。

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

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

关于c# - 流畅的 nhibernate 字符串到枚举选择查询示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33661971/

相关文章:

c# - 使用 ReadElementContentAsString 读取时,XmlReader 'Text' 是无效的 XmlNodeType

ios - Swift 枚举函数仅适用于枚举的单个案例?

Spring Boot Controller - 枚举参数作为值

javascript - 如何在 typescript 中将枚举转换为键、值数组?

C# 字符串中的 UTF-8 字节位置

c# - 当我将解决方案移动到另一个目录时,为什么在使用 "Database already exists"时得到 "AttachDbFileName"?

c# - XAML 键绑定(bind) 1,2,3

c# - NHibernate 不支持指定的方法

c# - 如何获取 NHibernate 中的连接标准计数

c# - 将值为 System.Guid.Empty 的 NHibernate "translate"C# POCO Guid 属性保存为数据库 uniqueidentifier 字段的 NULL?