簡體   English   中英

如何在FluentNHibernate Mapping中執行並從存儲過程中返回值?

[英]How to execute and return value form a stored procedure inside FluentNHibernate Mapping?

好吧,我在FluentNHibernate有一個像這樣的ClassMap來映射我

public class AbNopCommereceMap : ClassMap<AbNopCommerece>
{
    public AbNopCommereceMap()
    {
        Table("AbNopCommerece");
        Id(d => d.Id).CustomSqlType("BIGINT").GeneratedBy.Native();

        Map(d => d.Name).CustomSqlType("NVARCHAR(100)").Unique().Not.Nullable();    

        Map(u => u.PublisherName);
        Map(u => u.Author);
        Map(u => u.Country);
        Map(u => u.LastModifiedByFullName).Formula("(SELECT b.FirstName +' '+ b.LastName FROM Users b WHERE b.Id=CreatedBy)");

        Map(d => d.IsActive);
        Map(d => d.IsDeleted);
        Map(d => d.IsLocked);
        Map(d => d.CreatedBy).CustomType<TypedAggregateReferenceType<User>>();
        Map(d => d.CreatedByDate);
        Map(d => d.LastModifiedBy).CustomType<TypedAggregateReferenceType<User>>();
        Map(d => d.LastModifiedByDate);
        Map(d => d.Organization).Column("OrganizationId").CustomType<TypedAggregateReferenceType<Organization>>();
        Cache.Region("General").NonStrictReadWrite();
        ApplyFilter<OrganizationFilter>();
    }
}

這里LastModifiedByFullName是我從數據庫中選擇的用戶,我想在這里執行一個存儲過程,該存儲過程已經存在於我的SQL Server中,例如

CREATE PROCEDURE pop_use(@id int) 
as
DECLARE @FullName NVARCHAR(MAX)
SET @FullName = ''
SELECT @FullName = FirstName + ' '+ LastName FROM Users WHERE Id = @UserId

我已經解決了這個問題1問題2,但是他們使用了一個新函數或XML來從數據庫中檢索值。 所以,我的問題是,因為我NHibernate已經提供了一些諸如Format的功能,通過它我可以直接從數據庫中獲取值,因此ClassMap中有什么方法可以執行stored Procedure而讓我不要在ClassMap再次執行一些重復的代碼。 總之,我正在尋找通過先前定義的特定存儲過程從數據庫收集數據並將其添加到模型中的任何方法。

如前所述這里 ,你不能用在存儲過程SelectWhereHaving言,你需要使用一個返回值的函數。

CREATE FUNCTION pop_use(@UserId int) 
as
DECLARE @FullName NVARCHAR(MAX)
SET @FullName = ''
SELECT @FullName = FirstName + ' '+ LastName FROM Users WHERE Id = @UserId
Return(@FullName)

然后你可以使用你的功能

Map(u => u.LastModifiedByFullName).Formula("mySchema.pop_use(myIdColumnName)");

myIdColumnName是您的標識符的名稱。 請注意,您必須在函數調用中指定架構。

您可以看一下Ayende ,他為您提供了一個如何在公式中使用函數的示例。

感謝弗雷德里克( Frédéric)的寶貴意見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM