c# - Nhibernate:使用已定义的映射调用带有 CreateSqlQuery 的存储过程

标签 c# nhibernate stored-procedures fluent-nhibernate fluent-nhibernate-mapping

我使用 ISession.CreateSQLQuery 调用存储过程。

然后我用

SetResultTransformer(new AliasToBeanResultTransformer(typeof(Article))).List<Article>().ToList()

此方法的问题是 AliasToBeanResultTransformer 仅将 Article 表映射到 Article 类。

public class Article : Entity
{
    public virtual string Description { get; set; }
}

public class Entity
{
    public virtual int Id { get; set; }
}

public class ArticleRepository : Repository<Article>, IArticleRepository
{
    private ISession _session;

    public ArticleRepository(ISession session) : base(session)
    {
        _session = session;
    }

    public List<Article> GetByDescription(string description)
    {
        return _session
            .CreateSQLQuery("EXEC ArticlesByDescription :Description")
            .SetString("Description", description)
            .SetResultTransformer(new AliasToBeanResultTransformer(typeof(Article)))
            .List<Article>().ToList();
    }
}

但我在 Article 表上的主键名为 ArticleId,因此 AliasToBeanResultTransformer 会抛出异常。

Could not find a setter for property 'ArticleId' in class 'Core.DomainModels.Article'

有没有办法在使用 CreateSqlQuery 时重用 FluentNhibernateMapping?

编辑:

Nhibernate Documentation描述了如何将已映射的实体与 hbm 文件一起使用。

<sql-query name="GetProductsByCategoryId">
   <return class="Product" />
   exec dbo.GetProductsByCategoryId :CategoryId
</sql-query>

我真的问自己为什么不能仅通过代码来做到这一点?!

最佳答案

我正在使用此代码映射到存储库中的实体。我相信它也适用于调用过程:

public IEnumerable<Address> Search(string query, int maxCount)
{
    return session.CreateSQLQuery("SELECT * FROM address WHERE fts_col @@ plainto_tsquery('cs', :query) LIMIT :limit;")
        .AddEntity(typeof(Address)) // this is probably what you need to map to entity
        .SetString("query", query)
        .SetInt32("limit", maxCount)
        .List<Address>();
}

关于c# - Nhibernate:使用已定义的映射调用带有 CreateSqlQuery 的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10104701/

相关文章:

nhibernate - NHibernate 批量更新

.net - NHibernate - 将对象添加到多对多集合时,现有对象将被删除并重新插入

vba - 由于无法解释的循环,vba 中的标准错误处理问题

c# - 更改支持的方向

c# - 在 .NET 中暂停子进程?

c# - 如何防止 WPF 中的 Winforms WebBrowser 上的触摸反馈?

sql-server - SQL 性能 : Recompile versus drop and re-apply for stored procedure

c# - 通过反射确定方法是否不安全

c# - 如何使用(.NET 和 NHibernate - CreateSQLQuery)(不使用 "Foreach")

debugging - 是否可以通过调试器检查表值参数的内容?