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