我试图从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”,它会构建并运行,但在单击“保存”按钮时不会保存任何数据。
答案 0 :(得分:0)
首先,错误源于DbSet上找不到的Local属性。现在可能有很多原因。这已经在这里讨论了。
Why can I not see the property Local when using Entity Framework?
如果这没有帮助,请发布您的EF版本,以便我们进一步调查。
干杯。
答案 1 :(得分:0)
最后,我决定完全放弃使用实体框架。我从来没有能够使用DbContext而不是ObjectContext。我只是回到DataSet,虽然不理想,但工作正常。
获得的经验:除非您迫切需要使用EF进行数据库连接,否则请避免使用EF。对于临时使用来说,它太复杂和不稳定。