15

NH CreateSQLQuery メソッドを使用してデータを取得しようとしています

IList<Logistic> LCollection = sess.CreateSQLQuery(@"select * from some_schema.logistic")
                                           .SetResultTransformer(Transformers.AliasToBean(typeof(Logistic)))
                                           .List<Logistic>();

ロジスティッククラスは

public class Logistic
{
    public virtual long? l_id { get; set; }
    public virtual long? carrier_id { get; set; }
    ...
}

マッピング

public class LogisticMap : ClassMap<Logistic>
{
    public LogisticMap()
    {
        Table("some_chema.logistic");
        Id(x => x.l_id).GeneratedBy.Sequence("some_chema.logistic_sq");
        Map(x => x.carrier_id);
        ...
    }
}

しかし、私はエラーがあります

The type System.Decimal can not be assigned to a property of type System.Nullable`1[System.Int64] setter of MyNamespase.Logistic.l_id

何が間違っているのでしょうか?

4

1 に答える 1

29

トランスフォーマーは、エンティティの代わりに軽量の DTO を取得するAliasToBean場合に使用されます。(たとえば、各エンティティのいくつかの重要な情報のみを表示する概要画面がある場合は、DTO を使用し、AliasToBean トランスフォーマーを使用する NHibernate でクエリを作成して、NH がそうすべきではないことを認識できるようにすることをお勧めします。完全なエンティティを取得します)。

SQL クエリを使用してエンティティを取得する場合は、次のようにする必要があります。

var query = sess.CreateSQLQuery(@"select {l.*} from some_schema.logistic as l");

query.AddEntity ("l", typeof(Logistic));

return query.List<Logistic>();                                  

しかし、この場合、なぜネイティブ SQL クエリを使用したいのでしょうか? HQLICriteriaまたはを使用しないのはなぜQueryOverですか?

于 2012-09-20T13:54:57.850 に答える