簡體   English   中英

NHibernate QueryOver投影,枚舉和aliastobean變換器

[英]NHibernate QueryOver projections, enums and aliastobean transformers

如何使用QueryOver和AliasToBean將Enum值轉換為字符串值? 我有以下但嘗試轉換枚舉時出錯:

        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>();

假設你的枚舉在數據庫中存儲為int,我會嘗試將字符串readonly屬性設置為自定義字符串類型:

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>

希望這可以提供幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM