Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架插入不';行不通_C#_.net_Entity Framework_Datagridview_Ado.net - Fatal编程技术网

C# 实体框架插入不';行不通

C# 实体框架插入不';行不通,c#,.net,entity-framework,datagridview,ado.net,C#,.net,Entity Framework,Datagridview,Ado.net,我有一个非常简单的带有实体框架的windows窗体项目 简单地说,我从“表单”中的“数据源”选项卡中拖拽了我的表,它为我生成了一个“DataGridView”和一个“BindingSource” 数据绑定成功,当我运行项目时,我可以看到“DataGridView”正确地填充了数据,并且我可以从“DataGridView”更新任何单元格值 问题是我不能在“DataGridView”中插入任何行 以下是我编写的一些代码,希望对解决问题有用: Teachers_DBEntities conte

我有一个非常简单的带有实体框架的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文件中,我正确映射了所有列,主键
storeGeneratedPattern
属性设置为
Identity
,其
实体键
属性设置为
true
。它在我的SQL Server数据库文件中的
自动增量
属性设置为
true

感谢您的帮助

当我更新单元格时,context.savechanges()可以正常工作,但当我尝试在“DataGridView”中插入新记录时,它不起作用

你说“它不起作用”是什么意思?新记录未出现在数据库中?当然不会

在这一行

teachers_tableBindingSource.DataSource = context.teachers_table.ToList();
您正在断开数据源与上下文的连接。插入其中的任何新项目都不会插入到
teachers\u表
,而是插入到您在其上创建的
列表

using (var context = new YourEntities ()) 
{
     var dpt = new yourObject { Name = "Test" };
     context.yourObject.Add(dpt);
     context.SaveChanges(); 
}

在.Net 4.5中,您缺少在上下文中添加对象的功能。当我删除ToList()时,出现此错误:

不支持将数据绑定到存储查询


相反,使用数据填充DbSet,例如通过在DbSet上调用Load,然后绑定到本地数据。

您确定数据库中没有对象的标识(pk)吗?你能用AddObject等添加完整的代码吗?谢谢你的回复。我的(pk)是自动递增的,我没有为它输入任何值。我试图用AddObject在数据库中插入值,但问题是,在“DataGridView”中添加新行的操作完成后,我不知道如何理解。您的表是空的吗?您是否已经在空表中尝试过它?并且可以在保存更改之前检查验证错误?Boas,我更新了我的问题,并在其中回答了您的问题。谢谢您的回复。是否可以将“DataGridView”绑定到上下文?我的意思是,每当我在“DataGridView”上下文中插入新行时,就会自动添加新对象。若并没有,那个么我如何理解在“DataGridView”中完成新行添加以编写代码?谢谢,解决方案是什么?当项目启动时,如何在不中断数据源的情况下填充我的
DataGridView