のClassMapは次のようになります。
public sealed class ProductCategoryNavigationMap : ClassMap<ProductCategoryNavigation>
{
public ProductCategoryNavigationMap()
{
ReadOnly();
// Set "CategoryId" property as the ID column. Without this,
// OpenSession() threw an exception that the configuration was invalid
Id(x => x.CategoryId);
Map(x => x.CategoryNodeId);
Map(x => x.ParentCategoryNodeId);
Map(x => x.Name);
Map(x => x.Title);
Map(x => x.SeoUrl);
// The column name returned from the sproc is "VisibleInd",
// so this is here to map it to the "IsActive" property
Map(x => x.IsActive).Column("VisibleInd");
Map(x => x.DisplayOrder);
Map(x => x.ProductCount);
}
}
ストアドプロシージャへの呼び出しは次のようになります。
public List<NavigationViewModel> GetNavigationViewModel(int portalId, int localeId)
{
const string sql = "EXEC [dbo].[Stored_Procedure_Name] @PortalId=:PortalId, @LocaleId=:LocaleId";
return _session.CreateSQLQuery(sql)
.AddEntity(typeof(ProductCategoryNavigation))
.SetInt32("PortalId", portalId)
.SetInt32("LocaleId", localeId)
.List<ProductCategoryNavigation>()
.Select(x => new NavigationViewModel
{
CategoryId = x.CategoryId,
CategoryNodeId = x.CategoryNodeId,
ParentCategoryNodeId = x.ParentCategoryNodeId,
Name = x.Name,
Title = x.Title,
SeoUrl = x.SeoUrl,
IsActive = x.IsActive,
DisplayOrder = x.DisplayOrder,
ProductCount = x.ProductCount
})
.ToList();
}
AddEntityは使いれる、エンティティ・クラスがに結果をマップするために何を言って呼び出し、上記で定義したProductCategoryNavigationMap:
.AddEntity(typeof(ProductCategoryNavigation))
あなたが注意している場合
- :PortalId
- : "SQL" 変数の値でyは、次の2つのパラメータが表示されます
.SetInt32("PortalId", portalId)
.SetInt32("LocaleId", localeId)
:
ものがへの呼び出しを行うことにより、設定されているとのLocaleID
.List<ProductCategoryNavigation>()
を呼び出すとIListが提供され、LINQを使用して必要なものを投影することができます。この場合、NavigationViewModelのListを取得していますが、これは現在ProductCategoryNavigationと同じですが、必要に応じてエンティティから独立して変更できます。
これは、これが他の開発者がNHibernateの新機能に役立つことを望みます。
お返事ありがとうございます。私は働いているすべてのコードを投稿しますが、8時間が経過するまで私自身の質問に答えることはできません。 –
チュートリアルのリンクは壊れています – sweetfa
@sweetfaありがとう。私はリンクを削除し、別のものを探しています。 –