繁体   English   中英

在Entity Framework 5中使用复杂类型的存储过程吗?

[英]Using stored procedure in Entity Framework 5 with complex type?

我在SQL Server中具有以下存储过程:

ALTER PROCEDURE [dbo].[FullTextSearchOnContent]
(
    @SearchText NVARCHAR(200),
    @LanguageId INT ,
    @ContentStatusId INT ,
    @ResultCount INT 
)
AS

BEGIN
    SET FMTONLY OFF;
    SET NOCOUNT ON;
    IF (@SearchText IS NULL) OR (@SearchText = '') OR (@ResultCount IS NULL) OR (@ResultCount = 0) RETURN NULL;
    SELECT DISTINCT TOP(@ResultCount) 
        C.Id AS ContentId, C.ImagePath AS ContentImagePath, C.IsSpecial,C.LanguageId,C.LockCommenting,C.RegistrationDate AS ContentRegistrationDate,C.StatusId AS ContentStatusId,C.Summary,C.Title,C.VisitNumber,C.AllTagsString,
        CS.FarsiName AS ContentStatusFarsiName,
        U.Id As UserId,U.InitialReputation AS UserInitialReputation,U.IsAdmin AS IsUserAdmin,U.FullName AS UserFullName,U.PhotoPath AS UserPhotoPath,U.RoleId AS UserRoleId,U.UserStatusId AS UserStatusId
        --,T.Id AS TagId, T.Name AS TagName
        FROM Content AS C
    INNER JOIN [User] AS U ON U.Id = C.WriterId
    INNER JOIN [Subject] AS S ON S.Id = C.SubjectId
    INNER JOIN [ContentStatus] AS CS ON CS.Id = C.StatusId
    --INNER JOIN (SELECT DISTINCT * FROM Tag AS T
    --          INNER JOIN TagContent AS TC ON TC.TagId=T.Id) 
    --          AS T ON T.ContentId = C.Id
    WHERE C.LanguageId = @LanguageId AND C.StatusId=@ContentStatusId AND CONTAINS((C.Title,C.AllTagsString),@SearchText) ORDER BY C.RegistrationDate DESC
END

它用于某些列上的全文本搜索。

我想在EF5中使用它,但它总是返回int

如何在Entity Framework 5中使用它?

编辑:

我无法生成复杂类型,每当我单击“ Get Column Information按钮时,什么都不会发生!

在实体框架5中获取存储过程信息

我才找到答案。
我将存储过程更改如下:

ALTER PROCEDURE [dbo].[FullTextSearchOnContent]
(
    @SearchText NVARCHAR(200),
    @LanguageId INT ,
    @ContentStatusId INT ,
    @ResultCount INT 
)
AS

BEGIN
    SET NOCOUNT ON;

    DECLARE @ReturnTable table 
    (
        ContentId int not null,
        LanguageId int null,
        ContentStatusId int null,
        ContentTitle nvarchar(2000) null,
        ContentSummary nvarchar(2000) null,
        ContentImagePath nvarchar(50) null,
        IsSpecial bit null,
        LockCommenting bit null,
        VisitNumber int null,
        AllTagsString nvarchar(max) null,
        ContentRegistrationDate datetime not null,
        ContentStatusFarsiName nvarchar(50) null,
        UserId int null,
        UserInitialReputation int null,
        IsUserAdmin bit null,
        UserFullName nvarchar(71) null,
        UserPhotoPath nvarchar(50) null,
        UserRoleId int null,
        UserStatusId int null,
        SubjectId int not null,
        SubjectName nvarchar(50) null,
        SubjectSymbolPath nvarchar(1000) null
    )
    IF (@SearchText IS NULL) OR (@SearchText = '') OR (@ResultCount IS NULL) OR (@ResultCount = 0) RETURN NULL;
    INSERT @ReturnTable 
        SELECT DISTINCT TOP(@ResultCount) 
            C.Id AS ContentId, 
            C.LanguageId,
            C.StatusId AS ContentStatusId,
            C.Title AS ContentTitle,
            C.Summary AS ContentSummary,
            C.ImagePath AS ContentImagePath, 
            C.IsSpecial,
            C.LockCommenting,
            C.VisitNumber,
            C.AllTagsString,
            C.RegistrationDate AS ContentRegistrationDate,
            CS.FarsiName AS ContentStatusFarsiName,
            U.Id As UserId,
            U.InitialReputation AS UserInitialReputation,
            U.IsAdmin AS IsUserAdmin,
            U.FullName AS UserFullName,
            U.PhotoPath AS UserPhotoPath,
            U.RoleId AS UserRoleId,
            U.UserStatusId AS UserStatusId,
            S.Id AS SubjectId,
            S.Name AS SubjectName, 
            S.SymbolPath AS SubjectSymbolPath
            --,T.Id AS TagId, T.Name AS TagName
            FROM Content AS C
        INNER JOIN [User] AS U ON U.Id = C.WriterId
        INNER JOIN [Subject] AS S ON S.Id = C.SubjectId
        INNER JOIN [ContentStatus] AS CS ON CS.Id = C.StatusId
        --INNER JOIN (SELECT DISTINCT * FROM Tag AS T
        --          INNER JOIN TagContent AS TC ON TC.TagId=T.Id) 
        --          AS T ON T.ContentId = C.Id
        WHERE C.LanguageId = @LanguageId AND C.StatusId=@ContentStatusId AND CONTAINS((C.Title,C.AllTagsString),@SearchText) ORDER BY C.RegistrationDate DESC
    select * from @ReturnTable
    --SELECT TOP(@ResultCount) * from Content order by RegistrationDate desc
END

现在它就像一个魅力:-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM