流利Nhibernate枚举映射 [英] Fluent Nhibernate Enum Mapping
问题描述
在流利的NHibernate中,我有一些 enum
映射的问题。我知道这个问题已经被问了很多次,但我找不到任何解决方案,为我工作。我是NHibernate的新手,看起来我可能错过了一些简单而愚蠢的事情。这是我的代码。
public class DBPublication
{
public virtual int pub_id {get;组; }
public virtual PublicationStatuses status {get;组; }
...
}
public enum PublicationStatuses
{
on_moderation,
active,
...
}
public class DBPublicationMap:ClassMap< DBPublication>
{
public DBPublicationMap()
{
Table(content.publications);
Id(x => x.pub_id).GeneratedBy.Sequence(content.pub_sq);
Map(x => x.status);
$ postgres枚举类型 CREATE TYPE content.enum_publication_status AS ENUM('on_moderation','active',...);
但是当我试图保存的时候,postgres会抛出这个
列status的类型是content.enum_publication_status,但表达式的类型是文本
有什么建议?
解决方案这是一个配置nhibernate来存储枚举字段的工作示例。
public class实体
{
public virtual int id {get;组; }
public virtual SomeEnum EnumField {get;组; }
$ b $ public enum SomeEnum
{
Value1,
Value2
}
class EntityMap:ClassMap< ;实体>
{
public EntityMap()
{
Id(x => x.id).GeneratedBy.Native();
Map(x => x.EnumField);
$ b class程序
{
static void Main(string [] args)
{
var factory = (配置)>新的SchemaExport(config).create(false,true))
。数据库(MsSqlConfiguration.MsSql2008.ConnectionString(Data Source = .; Initial Catalog = nhtest; Integrated Security = True))
.BuildSessionFactory();
using(var session = factory.OpenSession())
{
using(var transaction = session.BeginTransaction())
{
var entity = new Entity );
entity.EnumField = SomeEnum.Value2;
session.Save(entity);
transaction.Commit();
在这种情况下,它将作为字符串存储在数据库中。如果您希望将其保存为整数,则需要将Enum字段属性的映射更改为以下内容:
Map(x = > x.EnumField).CustomType< int>();
I have some problem with enum
mapping in fluent NHibernate. I know this question has been asked many times but I couldn't find any solution that worked for me. I'm newbie in NHibernate and it looks like I may have missed something simple and stupid. Here is my code.
public class DBPublication
{
public virtual int pub_id { get; set; }
public virtual PublicationStatuses status { get; set; }
...
}
public enum PublicationStatuses
{
on_moderation,
active,
...
}
public class DBPublicationMap : ClassMap<DBPublication>
{
public DBPublicationMap()
{
Table("content.publications");
Id(x => x.pub_id).GeneratedBy.Sequence("content.pub_sq");
Map(x => x.status);
...
}
}
postgres enum type
CREATE TYPE content.enum_publication_status AS ENUM('on_moderation', 'active', ...);
but when I try to save, postgres throws this
column "status" is of type content.enum_publication_status but expression is of type text
any suggestion?
解决方案 Here is a working sample of configuring nhibernate to store enum field.
public class Entity
{
public virtual int id { get; set; }
public virtual SomeEnum EnumField { get; set; }
}
public enum SomeEnum
{
Value1,
Value2
}
class EntityMap : ClassMap<Entity>
{
public EntityMap()
{
Id(x => x.id).GeneratedBy.Native();
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())
{
using (var transaction = session.BeginTransaction())
{
var entity = new Entity();
entity.EnumField = SomeEnum.Value2;
session.Save(entity);
transaction.Commit();
}
}
}
}
In such case it is stored as strings in data base. If you want it be saved as integers, you need to change mapping for Enum field property to the following:
Map(x => x.EnumField).CustomType<int>();
这篇关于流利Nhibernate枚举映射的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!