如何使用代码映射在NHibernate中映射Enum

时间:2016-03-25 15:08:28

标签: c# nhibernate enums mapping-by-code

我使用流畅的NHibernate

访问数据表格时遇到异常
  

NHibernate.dll中发生了'NHibernate.HibernateException'类型的异常但未在用户代码中处理

附加信息:无法将1解析为状态

我的员工实体中有Enum类型。

  

员工

public class Employee
{
    public virtual Guid Id { get; set; }
    public virtual string Name { get; set; }
    public virtual DateTime DateOfBirth { get; set; }
    public virtual string ContactNumber  { get; set; }
    //[JsonConverter(typeof(StringEnumConverter))]
    public virtual State Status { set; get; }
    public virtual DateTime LastModify  { get; set; }
}
  

EmployeeMapping

public class EmployeeMap : ClassMapping<Employee>
{
    public EmployeeMap()

    {
        Table("Employee");

        Id(i => i.Id, m => m.Generator(Generators.GuidComb));

        Property(p => p.Name, m =>
        {
            m.NotNullable(false);
            m.Length(120);
        });

        Property(p => p.DateOfBirth, m => m.NotNullable(true));

        Property(p => p.ContactNumber, m =>
        {
            m.NotNullable(false);
            m.Length(12);
        });

        Property(p => p.Status, m => m.Column(y =>
        {
            y.NotNullable(true);
            y.Default(0);
        }));

        Version(v => v.LastModify, m =>
        {
            m.Column(y =>
            {
                y.NotNullable(true);
                y.Default("CURRENT_TIMESTAMP");
            });
            m.Type(NHibernateUtil.Timestamp);
            m.Generated(VersionGeneration.Never);
        });
    }       
}
  

State Enum

public enum State
{
    Probationer ,
    Permanent,
    Contractor
}

请建议我如何删除例外。

2 个答案:

答案 0 :(得分:2)

当我尝试使用Alexey的方法或以下方式通过代码使用NHibernate映射时:

Property(x => x.Command, o =>
{
  o.Type<CommandType>();
});

我遇到了“必须实现IUserType”的映射错误。映射枚举的正确方法是:

Property(x => x.Command, o =>
{
  o.Type<EnumType<CommandType>>();
});

答案 1 :(得分:0)

试试这个:

Apple TV