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 创建表脚本以供审核。
我想将 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 创建表脚本以供审核。