C#/ SQL:'System.Data.Objects.ObjectSet <databasename.tablename>不包含'Local'的定义</databasename.tablename>

时间:2014-01-02 23:31:06

标签: c# mysql sql visual-studio-2010 visual-studio-2012

我试图从Deitel的“C#2012 for Programmers”第20章专门围绕第625页的示例。我已经更改了一些名称(我的数据库是“pdxdevinv”而不是“BooksExamples”,我的表格是“hardwareidtable”而不是“作者”)。此外,我使用的是Visual Studio 2010而不是2012,因为它是我已经拥有的。我正在使用MySQL 6.0。

问题是该行:

hardwareidtableBindingSource.DataSource = dbcontext.hardwareidtables.Local; 

产生此错误,抱怨hardwareidtables没有名为Local的成员:

  

错误1'System.Data.Objects.ObjectSet'不包含'Local'的定义,也没有扩展方法'Local'接受类型'System.Data.Objects.ObjectSet'的第一个参数可以找到(是您是否缺少using指令或程序集引用?)C:\ Users \ swade \ Documents \ Visual Studio 2010 \ Projects \ InventoryTracker \ DisplayTable \ DisplayHardwareTable.cs 38 82 DisplayTable

这是整个源文件:

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Data;
using System.Data.Entity;
using System.Data.Entity.Validation;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace DisplayTable
{
    public partial class DisplayHardwareTable : Form
    {
        public DisplayHardwareTable()
        {
            InitializeComponent();
        }

        // Entity framework DbContext
        private InventoryTracker.pdxdevinvEntities dbcontext 
                  = new InventoryTracker.pdxdevinvEntities();

        private void DisplayHardwareTable_Load(object sender, EventArgs e)
        {
            // load hardwareidtables table ordered by manufacturer and then hardwareId
            dbcontext.hardwareidtables
                .OrderBy(h => h.manufacturer)
                .ThenBy(h => h.hardwareId)
                .Load();

            // THIS IS THE PROBLEMATIC LINE BELOW

            // specify DataSource 
            hardwareidtableBindingSource.DataSource = dbcontext.hardwareidtables.Local; // .Local????
        }

        private void hardwareidtableBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            Validate();
            hardwareidtableBindingSource.EndEdit();

            try
            {
                int ret = dbcontext.SaveChanges();
            }
            catch (DbEntityValidationException)
            {
                MessageBox.Show("Validation of entered fields failed", "Entity Valid Exception");
            }

        }
    }
}

如果从该行中删除“.Local”,它会构建并运行,但在单击“保存”按钮时不会保存任何数据。

2 个答案:

答案 0 :(得分:0)

首先,错误源于DbSet上找不到的Local属性。现在可能有很多原因。这已经在这里讨论了。

Why can I not see the property Local when using Entity Framework?

如果这没有帮助,请发布您的EF版本,以便我们进一步调查。

干杯。

答案 1 :(得分:0)

最后,我决定完全放弃使用实体框架。我从来没有能够使用DbContext而不是ObjectContext。我只是回到DataSet,虽然不理想,但工作正常。

获得的经验:除非您迫切需要使用EF进行数据库连接,否则请避免使用EF。对于临时使用来说,它太复杂和不稳定。