c# - SQL Server CE、 Entity Framework 和 WinForms 之间的简单连接

标签 c# winforms entity-framework sql-server-ce

我创建了一个简单的表单,其中包含两个用于名称和年龄的文本框以及一个用于提交的按钮。我在我的项目中添加了一个名为 Sample.sdf 的“本地数据库”。

我创建了一个名为 Customers 的表,并添加了三列:IdNameAge 。 我已将 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/

相关文章:

c# - 有条件地检查拨动开关 c#

c# - 反序列化具有在 AssemblyResolve 上加载的其他程序集中声明的类型字段的对象时出错

C# Windows 窗体 TreeView 在 LabelEdit 之后排序

c# - 在 foreach 循环中创建控件?

c# - 在 Windows 应用程序中处理系统时间更改

c# - 为每种类型选择最新项目

c# - 无法解释的变量增加

c# - 合并基类和派生 C# 类的工具

mysql - 将 MySQL 存储过程添加到 Entity Framework 上下文时出现外键约束错误

c# - EF Linq to Entities 在实体集上调用 ToList() 生成包含多个左外连接的 SQL 命令