gpt4 book ai didi

c# - NHibernate 使用存储过程或映射

转载 作者:行者123 更新时间:2023-11-30 14:39:28 25 4
gpt4 key购买 nike

我在 NHibernate 中有一个像这样工作的映射:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="BizEntities"
namespace="BizEntities"
default-lazy="false">
<class name="SubscriberQueueItem" table="SubscriberQueueItem">
<id name="SubscriberQueueItemId" column="Id" type="int" unsaved-value="0">
<generator class="identity" />
</id>
<property name="DateCreated" column="DateCreated" type="DateTime" />
<property name="CMIId" column="CMIId" type="int" />
<property name="DateProcessed" column="DateProcessed" type="DateTime" />
<property name="EventStatus" column="EventStatusId" type="QueueStatusTypeValues, BizEntities" />
<many-to-one name="Subscription" class="Subscription" column="SubscriptionId" />
<property name="ErrorDescription" column="ErrorDescription" type="string" />

</class>
</hibernate-mapping>

它是通过对表进行简单查询来检索的。

是否也可以将此类映射到存储过程?我编写了一个程序,它会吐出数据的特定部分,这些数据很难写入 NHibernate 查询,但很容易写成存储过程。

我可以像回答here 那样简单地添加一个存储过程映射吗? ,并根据我的 NHibernate 查询类型使用直接映射或存储过程检索对象,或者将存储过程映射添加到我的 hbm 是否意味着我只能基于该存储过程进行检索?

最佳答案

存储过程在 NHibernate 中工作得很好,我使用它们没问题:)

您需要将“命名查询”添加到您的休眠映射中,如下所示:

<sql-query name="spMyProcedure">
<!-- return type must be an NHibernate mapped entity -->
<return alias="SubscriberQueueItem" type="BizEntities.SubscriberQueueItem, BizEntities" />

exec spMyProcedure @Param1=:Param1, @Param2=:Param2
</sql-query>

如果存储过程的返回类型与已映射的实体不匹配,则需要创建一个新实体。

要调用 sp,您需要添加以下代码:

var query = session.GetNamedQuery("spMyProcedure");

query.SetParameter("Param1", "hello");
query.SetParameter("Param2", "byebye");

SubscriberQueueItem result = query.UniqueResult<SubscriberQueueItem>();

关于c# - NHibernate 使用存储过程或映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6373110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com