使用LINQ-to-SQL时,我希望在插入父实体时自动创建子记录。基本上,模仿SQL Insert触发器的工作方式,但是在代码中进行,以便进行一些额外的处理。
父实体与子实体有关联,但似乎我不能在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有一个对象/语句列表,可能不喜欢在其中添加新项目。同样地,拦截DataContext中的
partial void InsertParent(Parent instance)
函数并尝试添加Child
记录会产生相同的结果-没有错误,但数据库中没有添加任何内容。有没有办法在不向表示层添加代码的情况下获得这种行为?
更新:
OnValidate()
和InsertParent()
函数都从DataContext的SubmitChanges()
函数中调用。我怀疑这就是我尝试做的事情的固有困难-当DataContext正在提交现有更改到数据库时,它不允许插入其他对象(例如通过InsertOnSubmit()
)。理想情况下,我希望将所有内容保留在一个事务中,以便在插入/更新期间发生任何错误时,实际上在数据库中不会更改任何内容。因此,我试图模仿SQL触发器功能,通过对DataContext的
SubmitChanges()
函数进行单个调用来自动插入子记录。