Asp.net mvc mvc 5:可选模型属性

Asp.net mvc mvc 5:可选模型属性,asp.net-mvc,stored-procedures,asp.net-mvc-5,Asp.net Mvc,Stored Procedures,Asp.net Mvc 5,我有一个模型叫Project public class Project { [Key] public int ID { set; get; } public string Title { set; get; } public string Image { set; get; } public double? gained { set; get; } } 我将此模型与两个存储过程一起使用,一个返回所有属性,另一个不返回获得的属性。我

我有一个模型叫Project

public class Project
{
    [Key]
    public int    ID      { set; get; }
    public string Title   { set; get; }
    public string Image   { set; get; }
    public double? gained { set; get; }
}
我将此模型与两个存储过程一起使用,一个返回所有属性,另一个不返回获得的属性。我犯了这个错误

The data reader is incompatible with the specified 'Test.Models.Project'. A member of the type, 'Gained', does not have a corresponding column in the data reader with the same name.
我不想为每个存储过程编写单独的模型。
如何解决这个问题呢?

datareader有点笨,因为它只会匹配发送回它的内容。如您所见,如果缺少一列,它将失败

解决此问题的最简单方法是更新存储过程中的第二条SELECT语句,以传回名为GENED的列

SELECT ID, Title, Image, NULL as gained FROM table
在这里,我们不传回任何数据(NULL)作为获得的列。这将使数据读取器感到高兴,使您不需要多个模型,并且不会发回任何额外的数据

另一种可能是在模型中使用继承。有一个不包含GEND的基础模型,还有一个从包含GEND的基础模型继承的第二个模型

public class ProjectBase
{
    [Key]
    public int    ID      { set; get; }
    public string Title   { set; get; }
    public string Image   { set; get; }
}

public class ProjectGained : ProjectBase{
    public double? gained { set; get; }
}

非常感谢。我正在考虑是否有办法编写一个自定义属性,如[NotMapped],来解决这个问题。您建议的解决方案很好,但对我的案例不起作用,因为我在这方面有大量的属性model@MohammedEssamHelewa-我不知道,如果有多个属性没有映射到两个返回之间,则可能需要使用继承的模型路由。