fluent nhibernateマッピングの数値タイプの問題
3098 ワード
fluent nhibernateでは、数値タイプの設定が適切でないと、予期せぬエラーが発生する可能性があります.
一、マッピングエラーを引き起こす例えばoracleデータベースでは、フィールドIDタイプがnumberであり、結果はcodesmithでコードを生成し、実体クラスで自動的にdecimalと書く
結果はマッピングにこのように書かれ、実行中にエラーが発生します.
その原因としてdecimalタイプは小数を含む実数として解釈される可能性があるため,sequenceの使用に適していないと判断し,エラーを報告する.エンティティクラスのdecimalをintに変更すると、エラーが修正されます.
二、数値タイプが一致しないと関連付けに失敗しますか、それともそのdecimal問題ですか.
マッピングあり
結果実体クラスRpYearの属性RpYear.RpCategoryは永遠に空いています.その原因はRpYearですRPCATEGORYIDはdecimalタイプであり、RpCategory.IDはintで対応できません.同じようにRPCATEGORYIDをintに変更し、問題が修正されました.
一、マッピングエラーを引き起こす例えば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に変更し、問題が修正されました.