流利Nhibernate枚举映射 [英] Fluent Nhibernate Enum Mapping

查看:114
本文介绍了流利Nhibernate枚举映射的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在流利的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆