2012-05-05 25 views
4

如何使用QueryOver和AliasToBean將枚舉值轉換爲字符串值?我有以下的,但得到一個錯誤試圖改造枚舉時:NHibernate QueryOver預測,枚舉和aliastobean變換器

 SomeDTO someDTO = null; 
     SomeReferenceAlias someReferenceAlias = null; 
     var jobs = query 
      .JoinAlias(x => x.SomeReference,() => someReferenceAlias, JoinType.InnerJoin) 
      .SelectList(list => list 
       .Select(p => p.SomeStatusEnum).WithAlias(() => someDTO.SomeStatus)//problem here 
       .Select(p => someReferenceAlias.Name).WithAlias(() => someDTO.Name) 
       ) 
      .TransformUsing(Transformers.AliasToBean<SomeDTO>()) 
      .Take(100) 
      .List<SomeDTO>(); 
+0

在這個任何更新? – dotjoe

回答

1

假設你的枚舉存儲在你的數據庫的INT,我會嘗試一個字符串只讀屬性設置爲自定義字符串類型:

public enum SomeStatus {up=1,right=2,down=3,left=4} 


public class SomeStatusNhString : NHibernate.Type.AbstractStringType 
{ 
    public SomeStatusNhString() 
      : base(new StringSqlType()) 
     { 
     } 

    public SomeStatusNhString(StringSqlType sqlType) 
      : base(sqlType) 
     { 
     } 

    public override string Name 
    { 
     get { return "SomeStatusNhString"; } 
    } 

    public override object Get(System.Data.IDataReader rs, int index) 
    { 
     var x = base.Get(rs, index); 
     return ((SomeStatus)int.Parse((string)x)).ToString(); 
    } 
} 

然後你的映射

public virtual String StatusAsString{ get; set; } 


<property name="StatusAsString" column="YOUR_COLUMN" not-null="true" insert="false" update="false" type="YourNameSpace.SomeStatusNhString, YourDll" access="property"></property> 

希望這可以幫助