max*_*s87 5 nhibernate fluent-nhibernate
我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);
...
}
}
Run Code Online (Sandbox Code Playgroud)
postgres枚举类型
CREATE TYPE content.enum_publication_status AS ENUM('on_moderation', 'active', ...);
Run Code Online (Sandbox Code Playgroud)
但是当我试图保存时,postgres会抛出这个
column "status" is of type content.enum_publication_status but expression is of type text
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?
以下是配置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();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它作为字符串存储在数据库中.如果要将其保存为整数,则需要将Enum字段属性的映射更改为以下内容:
Map(x => x.EnumField).CustomType<int>();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9915 次 |
最近记录: |