我不明白为什么我的类被映射为复杂类型

时间:2014-01-26 17:41:37

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

我想在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; }
}

当我想在我的Controller中执行一些DbSet-Methods时,我收到一条错误消息,我的模型类被映射为复杂的Type。我读到一个复杂类型没有主键,但我在我的函数中定义了一个,我需要通过它来识别一个元素。如何在此ret-Table中指定主键?

1 个答案:

答案 0 :(得分:0)

当您执行类似

的操作时
context.Set<udf_GetReportsByController_Result>()

实体框架将查找根据结果类型映射的表。但是,此表不存在。该函数确实返回一个表,但这是一个表变量,而不是一个表是数据库模式的一部分。只有实体类型映射到模式表。

您只能通过调用导入的函数来获取udf_GetReportsByController_Result个对象:

var results = context.udf_GetReportsByController(accountNo);