我有一个名为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; }
}
我将此模型与两个存储过程一起使用,一个返回所有属性,另一个没有属性gained
。我收到了这个错误
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.
我不想为每个存储过程编写单独的模型。 请问如何解决?
答案 0 :(得分:2)
datareader在某种意义上是愚蠢的,它只会匹配发送给它的内容。如果缺少某列,则会失败,如您所见。
解决此问题的最简单方法是更新存储过程中的第二个SELECT语句,以传回一个名为gain的列。
SELECT ID, Title, Image, NULL as gained FROM table
在这里,我们将没有数据(NULL)作为获得的列传回。这应该使数据阅读器满意,使您不需要多个模型,也不会发回任何额外的数据。
另一种可能性是在模型中使用继承。有一个不包含获得的基础模型,并且有一个继承自包含获得的基础模型的第二个模型。
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; }
}