使用 WCF 数据服务保存对象及其相关对象



我正在使用 WCF 数据服务,它适用于大多数事情,但我在弄清楚如何更新具有相关实体集合的实体时遇到了麻烦。 例如,在下面的代码中,我有一个具有相关部门的 Batch 对象。 在我的数据库中,这表示为三个表 - 批次、部门和Batches_Departments。 EF 将其作为具有部门导航属性的批处理对象向我公开。

在下面列出的代码中,将创建 Batch 对象并填充 Departments 集合,但是当我调用 SaveChanges 时,只会在数据库中创建 Batch 对象。 部门被忽略。 如果在"保存更改"行上设置断点,则可以验证是否已填充"部门"集合。

private void Save()
{
  var batch = new DataService.Batch() { Description = txtDescription.Text, Filename = txtFilename.Text };
  foreach (var department in lstDepartments.CheckedItems)
  {
    var dept = _ctx.Departments
      .Select(d => d)
      .Where(d => d.DepartmentID == ((DataService.Department)department).DepartmentID)
      .First();
    batch.Departments.Add(dept);
  }
  _ctx.AddToBatches(batch);
  _ctx.SaveChanges();
}

确定我错过了一些明显的东西,但我似乎找不到它。 任何帮助将不胜感激。

这是当前生成的代码中的限制。您还需要将以下代码行添加到程序中:

context.AddLink(batch, "Departments", dept);

如果您愿意,还可以挂接到批处理的 PropertyChanged 事件。

编辑:我也找到了另一种选择。您可以执行以下操作,而不是AddLink

private void Save()
{
  var batches = new DataServiceCollection<Batch>(_ctx);
  var batch = new DataService.Batch() { Description = txtDescription.Text, Filename = txtFilename.Text };
  batches.Add(batch);
  foreach (var department in lstDepartments.CheckedItems)
  {
    var dept = _ctx.Departments
      .Select(d => d)
      .Where(d => d.DepartmentID == ((DataService.Department)department).DepartmentID)
      .First();
    batch.Departments.Add(dept);
  }
  // _ctx.AddToBatches(batch);
  _ctx.SaveChanges();
}

最新更新