我有一个非常简单的带有Entity Framework的Windows窗体项目。
我只是从“表单”中的“数据源”选项卡中删除了表格,它为我生成了“DataGridView”和“BindingSource”。
数据绑定成功,当我运行项目时,我可以看到“DataGridView”正确填充数据,我可以从“DataGridView”更新任何单元格值。
问题是我无法在“DataGridView”中插入任何行。
我写的一些代码希望它对解决问题很有用:
Teachers_DBEntities context = new Teachers_DBEntities();
private void SaveItem_Click(object sender, EventArgs e)
{
context.SaveChanges();
MessageBox.Show("saved successfully");
}
private void Form1_Load(object sender, EventArgs e)
{
teachers_tableBindingSource.DataSource = context.teachers_table.ToList();
}
提升评论
我测试了我的“BindingSource”并发现它成功地理解了在“DataGridVeiw”中是否插入了新记录,但是当我调用context.savechanges();
时,更改将不会应用于数据库
context.savechanges()
工作正常,但当我尝试在“DataGridView”中插入新记录时,它不起作用。
在我的edmx文件中,我正确映射了所有列,主键StoreGeneretedPattern
属性设置为Identity
,其Entity Key
属性设置为true
。我的SQL Server数据库文件中的auto-increment
属性设置为true
。
感谢任何帮助。
答案 0 :(得分:2)
更新单元格时,context.savechanges()工作正常,但当我尝试在“DataGridView”中插入新记录时,它不起作用。
你说“它不起作用”是什么意思?新记录没有出现在数据库中?当然不会。
在这一行
teachers_tableBindingSource.DataSource = context.teachers_table.ToList();
你正在打破DataSource
与上下文的连接。插入其中的所有新项目都不会插入teachers_table
,而是插入您在其上创建的List
。
答案 1 :(得分:1)
using (var context = new YourEntities ())
{
var dpt = new yourObject { Name = "Test" };
context.yourObject.Add(dpt);
context.SaveChanges();
}
您缺少在上下文中添加对象
答案 2 :(得分:0)
在.Net 4.5中,当我删除ToList()时出现此错误:
不支持将数据绑定到商店查询。
例如,通过调用DbSet上的Load,然后使用数据填充 DbSet ,然后将其绑定到本地数据。