Fluent NHibernate:将 Bool 属性 映射到 ORACLE DB

Fluent NHibernate: Mapping Bool Property to ORACLE DB

我想将 bool c# 属性 映射到 Oracle DB。我为此尝试了几种方法。但是没有用。网络上没有最佳解决方案的示例。 我的实体如下:

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

来自this 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");
    }
}

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

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

默认情况下,布尔值存储在数字列中。来自Oracle8iDialect.cs(此行由9i和10i导出):

RegisterColumnType(DbType.Boolean, "NUMBER(1,0)");

数据库中默认需要这样一个数字列,那么不用特殊类型配置就可以映射:

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

如果你想在数据库中有其他类型,你可以指定一个SQL类型或你自己的用户类型。

使映射和数据库模式保持一致的最简单方法是使用 NHibernate 模式生成器从映射生成模式。如果您不喜欢完全自动创建架构,则只能创建 SQL 创建表脚本以供审核。