2016-03-10 51 views
0

我想將bool c#屬性映射到Oracle DB。我嘗試了幾種方法。但沒有奏效。網上沒有例子可以找到最佳解決方案。 我作爲波紋管實體:Fluent NHibernate:將Bool屬性映射到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流利的映射例如:

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

但是這和其他方法不起作用。請幫幫我。

+1

「沒有工作」/「不工作」對於解釋發生了什麼問題太短了。見[這個頁面](http://www.catb.org/~esr/faqs/smart-questions.html#beprecise),由[SO如何問](/幫助/如何問)引用。 –

回答

1

該示例使用用戶類型。它需要在某個地方實施。

默認情況下,布爾值存儲在數字列中。從Oracle8iDialect.cs(該線由9i和10i的派生):

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

默認情況下,在數據庫中需要這樣的數列,那麼你就可以映射它無需特別配置類型:

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

如果你想在數據庫中有另一種類型,你可以指定一個SQL類型或你自己的用戶類型。

使映射和數據庫模式對齊的最簡單方法是使用NHibernate模式生成器從映射生成模式。如果您不希望完全自動創建模式,則只能創建用於審閱目的的SQL創建表腳本。

相關問題