我创建了一个简单的表单,其中包含两个用于名称和年龄的文本框以及一个用于提交的按钮。我在我的项目中添加了一个名为 Sample.sdf
的“本地数据库”。
我创建了一个名为 Customers
的表,并添加了三列:Id
、Name
和 Age
。
我已将 Id
列设置为主键,但未将其设置为标识列。
然后,我添加了一个名为 SampleEntities
的“ADO.NET 实体数据模型”。我选择“从数据库生成”并选择 Sample.sdf
。我已选择该表并单击“完成”。
在我完成的 Button_Click
事件中:
using (SampleEntities se = new SampleEntities())
{
Customer c = new Customer();
c.Id = FindNextId();
c.Age = Convert.ToDouble(txtAge.Text);
c.Name = txtAge.Text;
se.AddToCustomers(c);
se.AcceptAllChanges();
se.SaveChanges();
}
MessageBox.Show("Done");
我毫无问题地收到“完成”消息,但记录未显示在服务器资源管理器 - 客户表 - 显示表数据选项中。
注意:我知道在运行时,sdf 文件位于我的调试文件夹中。我检查了项目目录中的sdf文件和debug文件夹中的sdf文件,都没有任何记录。此外,我已将 sdf 文件属性“复制到输出目录”设置为“如果较新则复制”。
所以我的问题是,客户行在哪里?
最佳答案
问题出在您的 AcceptAllChanges
调用上。你不需要调用它;只需调用SaveChanges
即可。
using (SampleEntities se = new SampleEntities())
{
Customer c = new Customer();
c.Id = FindNextId();
c.Age = Convert.ToDouble(txtAge.Text);
c.Name = txtAge.Text;
se.AddToCustomers(c);
se.SaveChanges();
}
MessageBox.Show("Done");
如果您调用以下之一,则只需调用 AcceptAllChanges
:
SaveChanges(false)
SaveChanges(SaveOptions.None)
SaveChanges(SaveOptions.DetectChangesBeforeSave)
当您调用SaveChanges()
(不带参数)时,“接受所有更改”会自动发生。
关于c# - SQL Server CE、 Entity Framework 和 WinForms 之间的简单连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24972518/