C# Fluent NHibernate:将布尔属性映射到ORACLE DB

C# Fluent NHibernate:将布尔属性映射到ORACLE DB,c#,oracle,nhibernate,fluent-nhibernate,C#,Oracle,Nhibernate,Fluent Nhibernate,我想将boolc#属性映射到oracledb。我为此尝试了几种方法。但是没有起作用。在web上没有最佳解决方案的示例。 我的实体如下: public class Department : EntityBase<short> { [JsonIncludeProperty(NameOfSet = "list")] public virtual string Name { get; set; } public virtual Department Parent

我想将boolc#属性映射到oracledb。我为此尝试了几种方法。但是没有起作用。在web上没有最佳解决方案的示例。 我的实体如下:

 public class Department : EntityBase<short>
{
    [JsonIncludeProperty(NameOfSet = "list")]
    public virtual string Name { get; set; }

    public virtual  Department ParentDepartment { get; set; }
    public virtual IList<Department> ChildDepartments { get; set; }
    // Bool value
    public virtual bool IsActive { get; set; }
}
公共类部门:EntityBase
{
[JsonIncludeProperty(NameOfSet=“list”)]
公共虚拟字符串名称{get;set;}
公共虚拟部门父部门{get;set;}
公共虚拟IList子部门{get;set;}
//布尔值
公共虚拟布尔是活动的{get;set;}
}
从Fluent映射示例:

public class DepartmentMap : ClassMap<Department>
{
    public DepartmentMap()
    {
        Table("DEPARTMENTS");
        LazyLoad();
        Id(x => x.Id)
            .GeneratedBy.Sequence("DEPARTMENTS_SEQ")
            .Not.Nullable()
            .Column("DEPARTMENT_ID")
            .CustomSqlType("NUMBER(5,0)");
        Map(x => x.Name).Not.Nullable().Column("DEPARTMENT_NAME").CustomSqlType("NVARCHAR2(100)");

        Map(department => department.IsActive).Not.Nullable().Column("IS_ACTIVE").CustomType<YesNoType>();

        HasMany(x => x.ChildDepartments)
            .AsList()
            .Inverse()
            .Cascade.All()
            .KeyColumn("PARENT_DEPARTMENT_ID");

        References(x => x.ParentDepartment, "PARENT_DEPARTMENT_ID");
    }
}
公共类部门地图:类地图
{
公共部门地图()
{
表(“部门”);
懒散的负荷();
Id(x=>x.Id)
.GeneratedBy.Sequence(“部门顺序”)
.Not.Nullable()
.栏(“部门ID”)
.CustomSqlType(“数字(5,0)”);
Map(x=>x.Name).Not.Nullable().Column(“部门名称”).CustomSqlType(“NVARCHAR2(100)”;
Map(department=>department.IsActive).Not.Nullable().Column(“IS_ACTIVE”).CustomType();
有许多(x=>x.0个部门)
.AsList()
.Inverse()
.Cascade.All()
.KeyColumn(“家长、部门、ID”);
参考文献(x=>x.ParentDepartment,“家长部门ID”);
}
}

但这种方法和其他方法都不起作用。请帮助我。

该示例使用用户类型。它需要在某处实施

默认情况下,布尔值存储在数字列中。从Oracle8iDialect.cs(该行由9i和10i派生):

默认情况下,数据库中需要这样一个数字列,然后无需特殊类型配置即可映射:

  Map(department => department.IsActive).Not.Nullable().Column("IS_ACTIVE");
如果希望数据库中有其他类型,可以指定SQL类型或您自己的用户类型

使映射与数据库模式对齐的最简单方法是使用NHibernate模式生成器从映射生成模式。如果不希望完全自动创建架构,则只能创建SQL创建表脚本以供审阅。

“不工作”/“不工作”太短,无法解释出现的问题。请参阅,由引用。
  Map(department => department.IsActive).Not.Nullable().Column("IS_ACTIVE");