私のリポジトリには次のものがあります。
public IQueryable<ICustomer> GetByAddress(string address)
{
return from c in GetSession().Linq<ICustomer>()
where c.Address.StartsWith(address)
select c;
}
生成したいSQLは基本的に次のとおりです。
SELECT *
FROM Customer
WHERE address LIKE @address + '%'
しかし、私がするたびに
var customers = myRepository.GetByAddress("123 Main Street");
NullReferenceException が発生します。
System.NullReferenceException は処理
されませんでした Message="オブジェクト参照がオブジェクトのインスタンスに設定されていません。"
Source="NHibernate"
StackTrace:
NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetEntityName(ICriteria subcriteria, String propertyName)
at NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetColumns(String propertyName, ICriteria subcriteria)
at NHibernate.Loader.Criteria.CriteriaQueryTranslator. GetColumnsUsingProjection(ICriteria subcriteria, String propertyName)
Snip...
残りの例外は非常に冗長であるため省略しましたが、参考になる場合は追加できます。
を除いてまったく同じクエリであるのに、なぜこれが機能しないのですか
where c.Address == address
完全に正常に動作します。
何か案は?
編集
私は FluentNHibernate を使用しています (ID は GUID で、アドレスは文字列です):
public class CustomerMap: ClassMap<ICustomer>
{
public JobMap()
{
Id(x => x.Id);
...snip...
Map(x => x.Address).Not.Nullable();
}
}