我正在使用流利的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的默认行为。

NHibernate(没有Fluent NH)默认情况下将枚举保留为int。 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/

10-12 12:43
查看更多