使用 LINQ-to-SQL,我想在插入父实体时自动创建子记录。基本上,模仿 SQL 插入触发器的工作方式,但在代码中,以便可以完成一些额外的处理。
父母与孩子有关联,但似乎我不能简单地在 DataContext 的SubmitChanges()
.
例如,
public partial class Parent
{
partial void OnValidate(System.Data.Linq.ChangeAction action)
{
if(action == System.Data.Linq.ChangeAction.Insert)
{
Child c = new Child();
... set properties ...
this.Childs.Add(c);
}
}
}
这将是理想的,但不幸的是,新创建的Child
记录没有插入到数据库中。有道理,因为 DataContext 有一个对象/语句列表,并且可能不喜欢在其中添加新项目。
同样,拦截partial void InsertParent(Parent instance)
DataContext 中的函数并尝试添加Child
记录会产生相同的结果 - 没有错误,但没有任何内容添加到数据库中。
有没有办法在不向表示层添加代码的情况下获得这种行为?
更新:OnValidate()
和函数
都是InsertParent()
从 DataContext 的SubmitChanges()
函数中调用的。InsertOnSubmit()
我怀疑这是我正在尝试做的事情的固有困难- DataContext在将现有更改提交到数据库的过程中不允许插入其他对象(例如通过)。
理想情况下,我希望将所有内容都保留在一个事务下,这样,如果在插入/更新期间发生任何错误,数据库中实际上不会发生任何变化。因此,我尝试模仿 SQL 触发器功能,允许通过对 DataContextSubmitChanges()
函数的一次调用自动插入子记录。