我正在使用适用于大多数事情的WCF数据服务,但我无法确定如何更新具有相关实体集合的实体。例如,在下面的代码中,我有一个Batch对象,它有相关的Departments。在我的数据库中,这表示为三个表 - 批次,部门和批次_部门。 EF将此公开为具有Departments导航属性的Batch对象。
在下面列出的代码中,创建了Batch对象并填充了Departments集合,但是当我调用SaveChanges时,只在数据库中创建了Batch对象。部门被忽略了。如果我在SaveChanges行上设置断点,我可以验证是否填充了Departments集合。
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();
}
我确定我错过了一些明显的东西,但我似乎无法找到它。任何帮助将不胜感激。
答案 0 :(得分:1)
这是当前生成的代码中的限制。您还需要在程序中添加以下代码行:
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();
}