今日、空であってはならない従来のデータベースのフィールドが空だったという状況に遭遇しました。
このデータベースに対して NHibernate 3.2 を使用しており、影響を受けるクエリは QueryOver で記述されています。
私の現在のクエリはこれです
return Session
.QueryOver<FacilityGroup>()
.Where(fg => fg.Owner.Id == Token.OwnerId &&
fg.UserName == Token.UserName)
.OrderBy(fg => fg.Code).Asc
.TransformUsing(Transformers.DistinctRootEntity);
私はそれがこれであることを望みます:
return Session
.QueryOver<FacilityGroup>()
.Where(fg => fg.Owner.Id == Token.OwnerId &&
fg.UserName == Token.UserName &&
!string.IsNullOrEmpty(fg.Code))
.OrderBy(fg => fg.Code).Asc
.TransformUsing(Transformers.DistinctRootEntity);
これを試すと、「認識されないメソッド呼び出し: System.String:Boolean IsNullOrEmpty(System.String)」という例外が発生します。
そのため、NHibernate は string.IsNullOrEmpty を変換できません。けっこうだ。ただし、これを試すと
return Session
.QueryOver<FacilityGroup>()
.Where(fg => fg.Owner.Id == Token.OwnerId &&
fg.UserName == Token.UserName &&
!(fg.Code == null || fg.Code.Trim() == "" ))
.OrderBy(fg => fg.Code).Asc
.TransformUsing(Transformers.DistinctRootEntity);
InvalidOperationException 「スコープから参照されるタイプ 'Domain.Entities.FacilityGroup' の変数 'fg' が、定義されていません」 が発生します
何かご意見は?