gpt4 book ai didi

c# - LinqToSql 关联加载

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

这可能已经有人问过,但我找不到,所以就到这里吧。

我们有一个表的通用读取,使用 Context.GetTable( ) 然后附加一个表达式来查找表中的单个记录。该表具有关联。不幸的是,我们正在尝试更改建立关联的字段,因此;

Foo 是 FooId 上 Bar 的父级

当我们要更改 FooId 时,它会崩溃,因为 EntityRef 的 HasAlreadyLoaded 属性设置为 true。除非我对 LinqToSql 的理解不够好,否则我相信是在这个记录集上调用 SingleOrDefault 的行为实际上触发了查询,从而加载了所有关联的对象。

有没有办法阻止这种加载的发生? (ObjectTrackingEnabled 和 DeferredLoading 设置为 true)如果不是这个问题的常见解决方案是什么?目前我们还不知道个人关系,我不想研究找出关联并根据 id 加载它们的可能性。

我的首选方法本来是一种不太通用的方法,我本可以这样做 .Foo = Context.Foo.Select( x => x.Id == FooId ),但我们现在没有那么奢侈了。

最佳答案

在 LINQ to SQL 中,要更新关联属性,您必须从一个父对象的 EntitySet<> 中移动子对象。给另一个 parent 的EntitySet<> ,并在移动 LINQ to SQL 期间自动更新子项的关联属性。

例如:

        // Get the source parent
Foo foo1 = context.Foos.Where(f => f.ID == 1).SingleOrDefault();
Bar bar1 = foo1.Bars[0];

// (Note: you don't necessarily need to get foo1 first -
// you could just get bar1 directly and proceed from here...)

// Get the destination parent
Foo foo2 = context.Foos.Where(f => f.ID == 2).SingleOrDefault();

// Move the child over. LINQ to SQL automatically updates bar1.FooID from 1 to 2 here.
foo2.Bars.Add(bar1);

// Done.
context.SubmitChanges();

关于c# - LinqToSql 关联加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3777706/

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