[英]How to execute Entity Framework SQLQuery stored procedure with return value parameter?
[英]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
再次執行一些重復的代碼。 總之,我正在尋找通過先前定義的特定存儲過程從數據庫收集數據並將其添加到模型中的任何方法。
如前所述這里 ,你不能用在存儲過程Select
, Where
或Having
言,你需要使用一個返回值的函數。
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.