无法从'P.CoffeeShopDBEntities'转换为'System.Data.Objects.ObjectContext'

时间:2015-06-07 23:23:41

标签: c#

我尝试在VS2008(c#)中编写的Visual Studio 2013(c#)中重新创建一个代码(我在视频中看到过): 我已经尝试了EF 6和EF 5版本选项相同的结果..搜索网络和MSDN没有运气。

这是我的代码,其中的评论显示了我得到的错误:

 private CoffeeShopDBEntities cse = new CoffeeShopDBEntities();

        private void AddProductsToTabbedPanel()
        {

           // using (CoffeeShopDBEntities context = new CoffeeShopDBEntities()) 
     //--found this on msdn..got rid of old but end up w/2 new errors see below
      {
   //the foreach code below goes here
    }


            foreach(TabPage tp in tabControl1.TabPages)
            {

                ObjectQuery<tblProduct> filteredProduct = new ObjectQuery<tblProduct>
                    ("SELECT VALUE P FROM tblProducts AS P", cse);

                //when 'context' used 1)possible mistaken empty statment 
                //2)the name 'context' doesnt exist in the current context

                //when 'cse'used :
                //Error 1 The best overloaded method match for 'System.Data.Objects.ObjectQuery<P.tblProduct>.ObjectQuery(string, System.Data.Objects.ObjectContext)' has some invalid arguments    
                //Error 2 Argument 2: cannot convert from 'P.CoffeeShopDBEntities' to 'System.Data.Objects.ObjectContext'

           foreach (tblProduct tprod in filteredProduct)
                 {
                    Button b = new Button();
                    b.Text = tprod.Description;
                    tp.Controls.Add(b);
                 }
            }
        }

我在Stack Overflow上发现了类似的问题,并且回复声明它是语法错误,但没有指出在哪里。

1 个答案:

答案 0 :(得分:1)

您遇到错误,因为ObjectQuery正在寻找EF 4.0及更低版本附带的ObjectContext。 CoffeeShopDBEntities是DBContext类型,它带有EF 4.1及以上版本。

我建议您将查询更改为:

List<tblProduct> filteredProducts = cse.tblProducts.ToList();

如果您想了解有关ObjectContext与DBContext的更多信息,可以查看以下链接:

http://www.c-sharpcorner.com/UploadFile/ff2f08/objectcontext-vs-dbcontext/