C# 我不知道´;我不明白为什么我的类被映射为复杂类型

C# 我不知道´;我不明白为什么我的类被映射为复杂类型,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我想在ASP.NET MVC 4中显示用户定义函数中的信息。数据库中的函数如下所示: CREATE FUNCTION dbo.udf_GetReportsByController(@controller_account VARCHAR(128)) RETURNS @retReports table ( ID INTEGER IDENTITY PRIMARY KEY, ProviderID VARCHAR(50) NOT NULL , VertragID INTEGER

我想在ASP.NET MVC 4中显示用户定义函数中的信息。数据库中的函数如下所示:

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表中指定主键

context.Set<udf_GetReportsByController_Result>()

类是如何连接到您的dbcontext的?在我的上下文中,我有属性“public DbSet reportSet{get;set;}”和一个方法,它调用数据库函数并返回IQueryable。谢谢您的回答!我已经知道这一点,在我的控制器中,我使用它来创建一个列表:
result=db.udf\u GetReportsByController(acc)
但如果单击表中的某个元素,我希望在控制器中获取该特定元素,例如:
Report rep=result.Find(id)
,或者可以使用普通实体类型执行的操作。有没有办法通过ID获取特定元素?您可以从函数中获取结果,然后根据需要应用进一步的过滤器。但不
查找
。您可以执行
results.firstOrderDefault(…)
,但
Find
是一个基于
DbSet
和缓存实体的复杂函数,其中没有一个适用于函数结果。谢谢大家的回答!我用IQueryable对象处理了你告诉我的问题。我通过使用LINQ
result.any(r=>r.ID==ID(参数))找到我的特定报告
var results = context.udf_GetReportsByController(accountNo);