2014-01-26 49 views
0

我想在ASP.NET MVC 4 Razor中顯示用戶定義函數的信息。在數據庫中的函數如下所示:我不明白爲什麼我的類映射爲複雜類型

CREATE FUNCTION dbo.udf_GetReportsByController(@controller_account VARCHAR(128)) 
RETURNS @retReports table (
    ID INTEGER IDENTITY PRIMARY KEY, 
    ProviderID VARCHAR(50) NOT NULL , 
    VertragID INTEGER NOT NULL, 
    Leistungszeitraum_von DATE NOT NULL, 
    Leistungszeitraum_bis DATE NOT NULL, 
    ReportklasseID VARCHAR(50) NOT NULL, 
    Version INTEGER NOT NULL, 
    Status VARCHAR(64) 
) 
AS 
BEGIN 
    //Do some stuff and insert in the ret-table 
     RETURN; 
END; 
GO 

實體框架映射這個在這個類:

public partial class udf_GetReportsByController_Result 
{ 
    [Column("ID")]   
    public int ID { get; set; } 
    [Column("ProviderID")] 
    public string ProviderID { get; set; } 
    [Column("VertragID")] 
    public int VertragID { get; set; } 
    [Column("Leistungszeitraum_von")] 
    public System.DateTime Leistungszeitraum_von { get; set; } 
    [Column("Leistungszeitraum_bis")] 
    public System.DateTime Leistungszeitraum_bis { get; set; } 
    [Column("ReportklasseID")] 
    public string ReportklasseID { get; set; } 
    [Column("Version")] 
    public int Version { get; set; } 
    [Column("Status")] 
    public string Status { get; set; } 
} 

當我想做的事情在我的控制器一些DbSet的方法,我得到一個錯誤信息,我的模型類被映射爲複雜類型。我讀過一個複雜類型沒有主鍵,但我在我的函數中定義了一個,我需要通過它的ID來處理元素。我怎樣才能在這個ret-Table中指定主鍵?

+0

如何類連接到你的DbContext? –

+0

在我的上下文中,我有'public DbSet reportSet {get;組; }' 和一個方法,它調用數據庫函數並返回一個IQueryable 。 – TheDidi

回答

0

當你做這樣的事情

context.Set<udf_GetReportsByController_Result>() 

實體框架將尋找被打擊的結果類型映射表。但是,該表不存在。該函數確實會返回一個表,但這是一個表變量,而不是數據庫模式的一部分。只有實體類型被映射到模式表。

你只能得到udf_GetReportsByController_Result對象通過調用輸入函數:

var results = context.udf_GetReportsByController(accountNo); 
+0

感謝您的回答!我已經知道這一點,在我的控制器中,我使用這個來創建一個列表: 'result = db.udf_GetReportsByController(acc);' 但是,如果你點擊表中的某個元素,我想在我的控制器中獲取這個特定的元素,例如: '報告rep = result.Find(id)' 或您可以對普通實體類型執行的操作。 有什麼辦法通過它的ID獲取特定元素? – TheDidi

+0

您可以從函數中獲得結果,然後可以根據需要應用更多的過濾器。不過'查找'。您可以執行'results.FirstOrDefault(...)',但Find是基於DbSet和緩存實體的複雜函數,它們都不適用於函數結果。 –

+0

謝謝大家的回答!我像使用IQueryable對象一樣處理了您告訴我的問題。 我使用LINQ 'result.any(r => r.ID == id(parameter)); – TheDidi

相關問題