我想获得该表的特定列但是我收到此错误
数据阅读器与指定的“NewsDatabaseModel.News”不兼容。类型为“NewsSubject”的成员在数据读取器中没有相应名称的相应列。
我不想通过我想要调用它的模型使用存储过程。
这是我的代码
var NewsList = db.Database.SqlQuery<News_Application.News>("[dbo].[GetAllNews]").ToList();
return View("NewsList");
SQL:
CREATE PROCEDURE GetAllNews
AS
BEGIN
SELECT NewsId, NewsTitle
FROM News
END
答案 0 :(得分:2)
您的News_Application.News
类必须具有与存储过程中返回的select相同的命名属性,并且所有属性必须存在于select语句中。
由于您只需要一个列,因此请创建一个ViewModel类并将您的过程绑定到它,如下所示:
public class NewsViewModel
{
public int NewsId { get; set;}
public string NewsTitle { get; set; }
}
并绑定您的程序
var NewsList = db.Database.SqlQuery<NewsViewModel>("[dbo].[GetAllNews]").ToList();
[编辑]
要返回匿名对象,请执行以下操作:
var NewsList = db.Database.SqlQuery<NewsViewModel>("[dbo].[GetAllNews]").Select(x => new { x.NewsId, x.NewsTitle }).ToList();
这将返回一个没有类和所需属性的对象。
无论哪种方式,我相信你应该重新考虑你的设计。不应该使用存储过程来执行这样简单的查询。
假设您的实体名称为News
。
这就足够了:
var NewsList = db.News.Select(x => new { x.NewsId, x.NewsTitle }).ToList();
我建议您使用此网站来加快实体框架的速度:http://www.entityframeworktutorial.net/EntityFramework5/entity-framework5-introduction.aspx