我正在使用流畅的 nhibernate。我有一个存储字符串 VALUE1
、VALUE2
的数据库列。获取时需要将它们转换为枚举值。
基本上,我无法弄清楚:-
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/