Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么CreateSQLQuery引发异常“值系统.Object[]不是类型,不能在此泛型集合中使用”?_C#_Nhibernate - Fatal编程技术网

C# 为什么CreateSQLQuery引发异常“值系统.Object[]不是类型,不能在此泛型集合中使用”?

C# 为什么CreateSQLQuery引发异常“值系统.Object[]不是类型,不能在此泛型集合中使用”?,c#,nhibernate,C#,Nhibernate,我有以下数据库表: CREATE TABLE A ( [Id] [INT] IDENTITY (1,1) NOT NULL CONSTRAINT A_P_KEY PRIMARY KEY, [X] [INT] ) 以下是实体类: public class A { public virtual int Id { get; set; } public virtual int X { get; set; } } 以下是地图: internal class AConfigurat

我有以下数据库表:

CREATE TABLE A
(
[Id]    [INT] IDENTITY (1,1) NOT NULL CONSTRAINT A_P_KEY PRIMARY KEY,
[X] [INT]
)
以下是实体类:

public class A
{
    public virtual int Id { get; set; }
    public virtual int X { get; set; }
}
以下是地图:

internal class AConfiguration : ClassMapping<A>
{
    public AConfiguration()
    {
        Table("A");

        Id(x => x.Id, im =>
        {
            im.Column("Id");
            im.Generator(Generators.Identity);
        });
        Property(x => x.X, map => map.NotNullable(true));
    }
}
如上所示,QueryOver调用工作正常。但是CreateSQLQuery调用失败,出现以下异常:

System.ArgumentException was unhandled
  HResult=-2147024809
  Message=The value "System.Object[]" is not of type "[....].A" and cannot be used in this generic collection.
Parameter name: value
  ParamName=value
  Source=mscorlib
  StackTrace:
       at System.ThrowHelper.ThrowWrongValueTypeArgumentException(Object value, Type targetType)
       at System.Collections.Generic.List`1.System.Collections.IList.Add(Object item)
       at NHibernate.Util.ArrayHelper.AddAll(IList to, IList from)
       at NHibernate.Impl.SessionImpl.ListCustomQuery(ICustomQuery customQuery, QueryParameters queryParameters, IList results)
       at NHibernate.Impl.AbstractSessionImpl.List(NativeSQLQuerySpecification spec, QueryParameters queryParameters, IList results)
       at NHibernate.Impl.AbstractSessionImpl.List[T](NativeSQLQuerySpecification spec, QueryParameters queryParameters)
       at NHibernate.Impl.SqlQueryImpl.List[T]()
       at [....]
  InnerException: 
为什么CreateSQLQuery调用引发异常

问题的答案没有帮助,因为我正在从表中选择所有列;这个问题涉及选择有限的列。

CreateSQLQuery API将返回对象数组System.object[]。尝试将此对象数组映射到实体时出现异常

你有两种方法:

手动获取对象数组和映射

您可以使用session.CreateSQLQuerysql.List获取对象数组,并使用自定义逻辑进一步映射它。有关更多详细信息,请参阅或参考资料

指导NHibernate如何映射它

NHibernate有一种叫做变压器的功能。转换器有助于映射复杂对象。您可以使用如下所示的一种:

lst = session.CreateSQLQuery(sql)
    .SetResultTransformer(Transformers.AliasToBean<A>())
    .List<A>()
    .ToList();
有关更多详细信息,请参阅参考资料

lst = session.CreateSQLQuery(sql)
    .SetResultTransformer(Transformers.AliasToBean<A>())
    .List<A>()
    .ToList();