を使用してストアドプロシージャを呼び出しますISession.CreateSQLQuery
。
それから私は使用します
SetResultTransformer(new AliasToBeanResultTransformer(typeof(Article))).List<Article>().ToList()
このアプローチの問題は、テーブルをクラスに1対1AliasToBeanResultTransformer
でマップするだけであるということです。Article
Article
public class Article : Entity
{
public virtual string Description { get; set; }
}
public class Entity
{
public virtual int Id { get; set; }
}
public class ArticleRepository : Repository<Article>, IArticleRepository
{
private ISession _session;
public ArticleRepository(ISession session) : base(session)
{
_session = session;
}
public List<Article> GetByDescription(string description)
{
return _session
.CreateSQLQuery("EXEC ArticlesByDescription :Description")
.SetString("Description", description)
.SetResultTransformer(new AliasToBeanResultTransformer(typeof(Article)))
.List<Article>().ToList();
}
}
しかし、Article
テーブルの主キーはと呼ばれるArticleId
ためAliasToBeanResultTransformer
、例外がスローされます。
クラス「Core.DomainModels.Article」にプロパティ「ArticleId」のセッターが見つかりませんでした
使用時にFluentNhibernateMappingを再利用する方法はありCreateSqlQuery
ますか?
編集:
Nhibernateのドキュメントでは、すでにマップされているエンティティをhbmファイルで使用する方法について説明しています。
<sql-query name="GetProductsByCategoryId">
<return class="Product" />
exec dbo.GetProductsByCategoryId :CategoryId
</sql-query>
なぜコードだけではできないのか、と自問自答します。