【发布时间】:2014-05-06 20:33:04
【问题描述】:
目标:
使用 NHibernate 将数据检索到一个支持存储过程的类中。您使用 NHibernate 通过使用存储过程来检索数据。
问题:
我检索到一条错误消息:
未处理的类型异常 'NHibernate.Exceptions.GenericADOException' 发生在 NHibernate.dll 中
附加信息:无法执行查询
[执行 sp_retrieveAllProductCategory]
[SQL: exec sp_retrieveAllProductCategory]
我不知道在这种情况下该怎么做。
信息:
我正在使用 VS 2013 和 SQL Server 2012
test.hbm.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="data_layer" namespace="data_layer">
<sql-query name="sp_retrieveAllProductCategory">
<return class="Produkt">
<return-property column="Produkt_kategori" name="Produkt_kategori" />
<return-property column="Produkt_kategori_ordningsnummer" name="Produkt_kategori_ordningsnummer" />
</return>
exec sp_retrieveAllProductCategory
</sql-query>
</hibernate-mapping>
----------------------
hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">Data Source=SHAREPOINT01;Initial Catalog=Active_system;Integrated Security=True</property>
<property name="show_sql">false</property>
<mapping assembly="data_layer"/>
</session-factory>
</hibernate-configuration>
-------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using NHibernate.Cfg;
namespace data_layer
{
public class NhibernateDataProvider
{
public NhibernateDataProvider()
{
_sessionFactory = new Configuration().Configure().BuildSessionFactory();
_session = _sessionFactory.OpenSession();
}
private ISessionFactory _sessionFactory;
private ISession _session;
public IList<Produkt> GetAllEmployee()
{
return _session.CreateCriteria<Produkt>().List<Produkt>();
}
public void GetNamedQuery()
{
IQuery query = _session.GetNamedQuery("sp_retrieveAllProductCategory");
// IList<Product> products = query.List<Product>();
IList<Produkt> products = query.List<Produkt>();
}
}
}
-------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace data_layer
{
public class Produkt
{
public virtual string Produkt_kategori { get; set;}
public virtual int Produkt_kategori_ordningsnummer { get; set;}
}
}
【问题讨论】:
-
目标相同但没有问题的情况。
-
好的,同意-但是您应该以文本形式发布您的查询和命令-而不是几乎无法阅读和理解的屏幕截图......跨度>
-
如果你使用firefox你可以右击图片>查看图片。 A 将出现原稿尺寸。不知道它是否适用于chrome或IE。
-
旁注:您应该不为您的存储过程使用
sp_前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免sp_并使用其他东西作为前缀 - 或者根本不使用前缀! -
我已经应用了更多的文字和图片以便更好地理解。
标签: c# sql nhibernate stored-procedures sql-server-2012