从Ef Code First中的存储过程返回自定义表

时间:2016-05-12 08:26:24

标签: c# asp.net sql-server asp.net-mvc entity-framework

是否可以从SP返回自定义表格。我使用EF代码第一种方法。

这是我的SP

CREATE PROCEDURE [dbo].[GetUserNotification]  
    @ToUserId INT
AS
BEGIN
select  TU.FullName as ToUserName,
        FU.FullName as FromUserName, 
        N.NotificationClickType,
        N.TemplateId,
        J.Title as JobTitle,
        J.Identifier as JobIdentifier,
        B.Identifier as BidIdentifier
        from Notification N
        inner Join  AppUser TU on TU.Identifier = N.ToUserId
        inner Join  AppUser FU on FU.Identifier = N.FromuserId
        inner Join Bid B on B.Identifier = N.NotificationBidId
        inner Join Job J on J.Identifier = B.JobId
        where N.ToUserId=@ToUserId
        Order By N.Identifier DESC
END

我的自定义视图模型

public class NotificationModel
    {
        public string ToUserName { get; set; }

        public string FromUserName { get; set; }

        public NotificationClickType NotificationClickType { get; set; }

        public int TemplateId { get; set; }

        public string JobTitle { get; set; }

        public int JobIdentifier { get; set; }

        public int BidIdentifier { get; set; }
    }

我创建了相同的ViewModel。但是我所看到的每一个使用SP我都可以返回我在DbContext类中添加的单个表数据。

1 个答案:

答案 0 :(得分:0)

将存储过程添加到EF模型时,它将自动创建复杂类型。 (至少它是为我做的,使用Model First)。

复杂类型的名称是添加了“_Result”的SP名称,例如GetUserNotification_Result。

您可以使用类似的复杂类型:

using (Entities dbContext = new Entities())
{
    List<GetUserNotification_Result > data = dbContext.GetUserNotification(userId).ToList();
}

或者,https://msdn.microsoft.com/en-us/data/jj691402.aspx显示如何首先使用代码。 How to call Stored Procedure in Entity Framework 6 (Code-First)?也可能有所帮助。