gpt4 book ai didi

linq - 用 LINQ-to-SQL 模仿 SQL 插入触发器

转载 作者:行者123 更新时间:2023-12-04 14:37:00 24 4
gpt4 key购买 nike

使用 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() 调用函数功能。我怀疑这是我尝试做的固有困难 - DataContext 将不允许插入其他对象(例如,通过 InsertOnSubmit() ),而它正在向数据库提交现有更改。

理想情况下,我希望将所有内容都保留在一个事务下,以便在插入/更新期间发生任何错误时,数据库中实际上没有任何更改。因此,我尝试模仿 SQL 触发器功能,允许通过对 DataContext 的 SubmitChanges() 的单个调用自动插入子记录。功能。

最佳答案

如果您希望它在保存之前发生;您可以覆盖 SubmitChanges ,并调用 GetChangeSet()获取挂起的更改。查找您感兴趣的内容(例如, delta.Inserts.OfType<Customer>() ,然后进行所需的更改。

然后调用 base.SubmitChanges(...) .

Here's a related example ,处理删除。

关于linq - 用 LINQ-to-SQL 模仿 SQL 插入触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1240555/

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