2015-08-17 2 views
0

Я получаю сообщение об ошибке с методом ObjectQuery, может кто-то помочь?Запрос объекта в Entity Framework 6

private void AddProductsToTabbedPanel() 
     { 
      foreach (TabPage tp in tabControl1.TabPages) 
      { 
       ObjectQuery<TblProduct> filteredProduct = new ObjectQuery<TblProduct>("Select value p from TblProduct as P", csdbe); 

       foreach (TblProduct tpro in filteredProduct) 
       { 
        Button btn = new Button(); 
        btn.Text = tpro.Description; 
        tp.Controls.Add(btn); 
       } 
      } 
     } 

моя логика в том, что он добавляет кнопку на вкладке управления на основе того, что содержание TblProduct

Но я получил ошибку:

Argument 2: cannot convert from 'Coffee_Shop.CoffeeShopDatabaseEntities' to 'System.Data.Entity.Core.Objects.ObjectContext'

The best overloaded method match for 'System.Data.Entity.Core.Objects.ObjectQuery.ObjectQuery(string, System.Data.Entity.Core.Objects.ObjectContext)' has some invalid arguments

+0

Что такое 'тип csdbe'? –

+0

* Скорее всего, вы используете подход, ориентированный на 'DbContext' (' csdbe' выходит из 'DbContext', а не' ObjectContext' - правильно?), Который больше не поддерживает 'ObjectQuery'. Это очень старый код EF - вы должны обновить его до более позднего метода. –

+0

У вас есть ссылка на недавний метод? если у вас это, это мне очень поможет. Еще раз спасибо за ответ. – LuluErwin

ответ

0

Чтобы начать истинную проблему здесь используя сущность framework как способ запуска вашего кода sql, для этого не предназначена инфраструктура сущности. Если у вас есть рамки объекта подключены к базе данных просто сделать это, чтобы получить ваши объекты:

//assuming csdbe is your data context 
var filteredProduct = csdbe.TblProduct; 

В вашем примере выше вы не фильтровать запрос, просто просим для всех из них. Для фильтрации в приведенном выше примере использования .где

var filteredProduct = csdbe.TblProduct.Where(x => x.SomeValue == "yourValue"); 

Теперь для Вашего оригинального вопроса:

Аргумент 2: не может конвертировать из «Coffee_Shop.CoffeeShopDatabaseEntities» до «» System.Data.Entity.Core.Objects.ObjectContext

Появляется за исключением того, что вы получаете, что «csdbe» является объектом «CoffeeShopDatabaseEntities». Второй требуемый параметр - это контекст данных.

var filteredProduct = new ObjectQuery<TblProduct>("SELECT VALUE P FROM TblProducts AS P", yourContext); 
+0

Привет, Стивен, Спасибо за это .. Я думаю .. Мне нужно узнать больше .. относительно новой структуры сущности. Спасибо. – LuluErwin

+0

Нет проблем. Я думаю, что, когда вы узнаете больше об инфраструктуре сущности или любом другом ORM, вы обнаружите, что это на самом деле проще в использовании, чем писать SQL любым способом. –

+0

Не могли бы вы помочь мне решить, с этого момента ... у меня нет времени, чтобы прочитать его больше ... поскольку мне нужно закончить этот проект .. завтра ... Вот мой код. – LuluErwin

0

--- Ваш код должен выглядеть следующим образом

string queryString = @"SELECT VALUE P FROM Tblproducts as P"; 

foreach (tblproducttype pt in cse.tblproducttypes) 
{ 
    ObjectContext context =((IObjectContextAdapter) cse).ObjectContext; 
    ObjectQuery<tblproduct> filteredproduct = new ObjectQuery<tblproduct>(queryString, context); 

    foreach (tblproduct tprod in filteredproduct) 
    { 
     Button b = new Button(); 
     b.Text = tprod.description; 
     tp.Controls.Add(b); 
    } 
} 
Смежные вопросы