gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:42 25 4
gpt4 key购买 nike

我使用的是 WCF 数据服务,它在大多数情况下都运行良好,但我无法弄清楚如何更新具有相关实体集合的实体。例如,在下面的代码中,我有一个具有相关部门的 Batch 对象。在我的数据库中,这表示为三个表 - Batches、Departments 和 Batches_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();
}

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

最佳答案

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

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();
}

关于c# - 使用 WCF 数据服务保存对象及其相关对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11313461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com