gpt4 book ai didi

nhibernate - 流畅的 Nhibernate 枚举映射

转载 作者:行者123 更新时间:2023-12-04 18:11:37 25 4
gpt4 key购买 nike

我对 enum 有一些问题在流畅的 NHibernate 中映射。我知道这个问题已经被问过很多次了,但我找不到任何对我有用的解决方案。我是 NHibernate 的新手,看起来我可能错过了一些简单而愚蠢的东西。这是我的代码。

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 枚举类型
CREATE TYPE content.enum_publication_status AS ENUM('on_moderation', 'active', ...);

但是当我尝试保存时,postgres 抛出了这个
column "status" is of type content.enum_publication_status but expression is of type text

有什么建议吗?

最佳答案

这是配置 nhibernate 以存储枚举字段的工作示例。

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();
}
}

}
}

在这种情况下,它作为字符串存储在数据库中。如果要将其保存为整数,则需要将 Enum 字段属性的映射更改为以下内容:
Map(x => x.EnumField).CustomType<int>();

关于nhibernate - 流畅的 Nhibernate 枚举映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12724128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com