2016-04-18 3 views
-1

Я хочу, чтобы получить конкретный столбец таблицы, но я получаю эту ошибкухранимой процедуры с Entity Framework получить только один столбец

Считыватель данных несовместим с указанным «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 

ответ

2

Ваш класс News_Application.News должны иметь одинаковые именованные свойства, как возвращаемые выбрать из хранимой процедуры, и все свойства должны существовать в избранных предложение.

Поскольку вы хотите только один столбец, создать класс ViewModel и связать вашу процедуру к ней, как это:

public class NewsViewModel 
{ 
    public int NewsId { get; set;} 
    public string NewsTitle { get; set; } 
} 

и привязывать ваша процедура

var NewsList = db.Database.SqlQuery<NewsViewModel>("[dbo].[GetAllNews]").ToList(); 

[EDIT]

Для возврата анонимного объекта выполните следующие действия:

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

+0

Спасибо вам триумфатора ответ ... acutally мое лицо выглядит следующим образом общественности class News {public int NewsId {get; set;} public string NewsTitle {get; задавать; } public string Subject {get; задавать; } public string Date {get; задавать; }} Мне нужно только получить NewsID и NewsTitle, поэтому я написал SELECT NewsId, NewsTitle FROM News – Lucia

+0

Это ваша проблема: у вас есть два свойства, которые ваш выбор не извлекает. (Тема и дата). Это причина вашей ошибки. Вы должны сделать то, что я предложил, или использовать анонимный объект. –

+0

. Большое вам спасибо за помощь, пожалуйста, дайте мне простой пример анонимного объекта. – Lucia