5

Status プロパティを含む ProductRisk をクエリしています。ここで、Status は列挙型です。ProductRisk のマッピングは次のとおりです。

public class ProductRiskMap : ClassMap<ProductRisk>
{
    public ProductRiskMap()
    {
        Table("AccountManagement.dbo.ProductRisk");

        Id(x => x.Id, "ProductRiskID");

        References(x => x.AssociatedProduct, "ProductID");
        References(x => x.AssociatedClient, "EntityId");

        Map(x => x.Reason, "ProductRiskReasonID").CustomType<int>();
        Map(x => x.Status, "RiskStatusID").CustomType<int>();
    }

Status は、4 つの可能な値を持つ列挙型です。データベースでは、ルックアップ テーブルへの外部キー参照として表されます。私のリポジトリで、ステータスがMediumまたはの ProductRisk オブジェクトをプルしたいと考えていますHigh。Ling To NHibernate の次のクエリは機能します。

    public IList<ProductRisk> GetByClient(int[] clientIds)
    {
        return NHibernateSession.Current.Query<ProductRisk>()
            .Where(x => clientIds.Contains(x.AssociatedClient.Id))
            .Where(x => x.Status == RiskStatus.Medium || x.Status == RiskStatus.High)                
            .ToList();
    }

しかし、Criteria API で同等のクエリを (私が思うに) 使用すると、次のようになります。

        return NHibernateSession.Current.QueryOver<ProductRisk>()
            .WhereRestrictionOn(x => x.AssociatedClient.Id).IsIn(clientIds)
            .Where(x => x.Status == RiskStatus.Medium || x.Status == RiskStatus.High)
            .List();

次のエラーが表示されます。

NHibernate.Criterion.SimpleExpression のタイプが一致しません: ステータスは、予想されるタイプ System.Int32、実際のタイプ FIS.AccountManagement.Core.Domain.RiskStatus です

何故ですか?助けてくれてありがとう。

4

1 に答える 1

4

FluentNHで列挙型をintにマップする場合は、列挙型をカスタムタイプとして指定すると、次のようになります。

Map(x => x.Status, "RiskStatusID").CustomType<RiskStatus>();
于 2011-11-14T09:09:33.370 に答える