2016-05-12 46 views
0

是否可以从SP返回自定义表。我使用EF代码第一种方法。从Ef代码优先存储Procdure中返回自定义表

这是我的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 [email protected] 
     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; } 
    } 

我创建相同的视图模型。但是我见过的每一处使用SP我只能返回我在DbContext类中添加的单个表数据。

回答

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)?也可能有帮助。

+0

但我先使用代码。我根本没有edmx文件。如何将我的SP添加到我的上下文类。 – Programmer

+0

@程序员 - 请参阅我编辑的答案。 –