nhibernate - 命名查询未知错误尝试使用 Fluent NHibernate 调用存储过程

标签 nhibernate fluent-nhibernate nhibernate-mapping

我正在为一个项目设置 NHibernate,我有一些疑问,由于它们的复杂性,我们将作为存储过程离开。我希望能够使用 NHibernate 来调用 sproc,但是遇到了一个我无法弄清楚的错误。因为我使用的是 Fluent NHibernate,所以我使用的是推荐的混合模式映射 here .但是,当我运行该应用程序时,我收到“未知的命名查询:AccountsGetSingle”异常,我不知道为什么。我想我的 HBM 映射可能有问题,因为我不太熟悉使用它们,但我不确定。

我的 NHibernate 配置代码是:

private ISessionFactory CreateSessionFactory()
{
    return Fluently.Configure()
        .Database(MsSqlConfiguration.MsSql2005
            .ConnectionString((conn => conn.FromConnectionStringWithKey("CIDB")))
                .ShowSql())
        .Mappings(m => 
            {
                m.HbmMappings.AddFromAssemblyOf<Account>();
                m.FluentMappings.AddFromAssemblyOf<Account>();
            })
        .BuildSessionFactory();
}

我的 hbm.xml 文件是:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
    <sql-query name="AccountsGetSingle">
        <return alias="Account" class="Core, Account"></return>
        exec AccountsGetSingle
    </sql-query>
</hibernate-mapping>

我调用 sproc 的代码如下所示:
public Account Get()
{
    return _conversation.Session
        .GetNamedQuery("AccountsGetSingle")
        .UniqueResult<Account>();
}

任何想法或想法将不胜感激。谢谢。

更新: @kibbled_bits 的建议让我得到了我正在寻找的最终结果(能够从 NHibernate 调用存储过程),但我仍然不知道为什么我上面列出的方法不起作用。我仍然很好奇为什么,因为它可能为 future 的问题提供有值(value)的见解。

最佳答案

当我必须使用存储过程时(只有在我被迫使用时才会发生)。我更愿意使用以下方法来执行它们:

var list = Session.CreateSQLQuery("exec GetCustomerByNaturalKey ?, ?")
.AddEntity(typeof(Customer))
.SetInt32(0, customerNo)
.SetDateTime(1, createdDate)
.List<Customer>();

.SetInt32/DateTime 的第一个参数只是参数的序号位置。

关于nhibernate - 命名查询未知错误尝试使用 Fluent NHibernate 调用存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2568753/

相关文章:

NHibernate二级缓存在没有缓存配置的情况下缓存实体

c# - 一对多映射不是级联删除

c# - 在 NHibernate 中使用冗长的类映射

NHibernate + 无法将值 NULL 插入

NHibernate代理工厂

nhibernate - Fluent NHibernate 父子级联 SaveOrUpdate 失败

sql-server - 构建类似于 Stackoverflow "Inbox"的功能的推荐方法是什么?

c# - String Unlimited 仍然限制为 4000 个字符?

c# - 是否有一种流畅的 NHibernate 方法可以索引所有外键而无需编码?

c# - 是否可以使用 nhibernate linq 在子集合属性上添加 .Where()?