fluent nhibernateマッピングの数値タイプの問題

3098 ワード

fluent nhibernateでは、数値タイプの設定が適切でないと、予期せぬエラーが発生する可能性があります.
一、マッピングエラーを引き起こす例えばoracleデータベースでは、フィールドIDタイプがnumberであり、結果はcodesmithでコードを生成し、実体クラスで自動的にdecimalと書く
public virtual Decimal ID { get;set;}

結果はマッピングにこのように書かれ、実行中にエラーが発生します.
Id(s => s.ID).GeneratedBy.Sequence("SEQ_RPYEAR");

その原因としてdecimalタイプは小数を含む実数として解釈される可能性があるため,sequenceの使用に適していないと判断し,エラーを報告する.エンティティクラスのdecimalをintに変更すると、エラーが修正されます.
二、数値タイプが一致しないと関連付けに失敗しますか、それともそのdecimal問題ですか.
    [Serializable]
    public class RpYear  
    {
        public virtual int ID{get; set;}

        public virtual decimal RPCATEGORYID{get; set;}

        public virtual RpCategory RpCategory { get; set; }
    }
    [Serializable]
    public class RpCategory
    {
        public virtual int? ID { get; set; }
    }

マッピングあり
        public RpYearMap()
        {
            Table("Rpyear");
            Id(s => s.ID).GeneratedBy.Sequence("SEQ_RPYEAR");
            Map(s => s.RPCATEGORYID);

            References(s => s.RpCategory).Column("RPCATEGORYID").Not.Insert().Not.Update();
        }

結果実体クラスRpYearの属性RpYear.RpCategoryは永遠に空いています.その原因はRpYearですRPCATEGORYIDはdecimalタイプであり、RpCategory.IDはintで対応できません.同じようにRPCATEGORYIDをintに変更し、問題が修正されました.