实体框架插入不起作用

时间:2012-08-03 06:42:06

标签: c# .net entity-framework datagridview ado.net

我有一个非常简单的带有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

感谢任何帮助。

3 个答案:

答案 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 ,然后将其绑定到本地数据。