C# LinqToSql关联加载
这可能已经被问过了,但我找不到,所以就来吧 我们使用Context.GetTable()对表进行一般读取,然后附加一个表达式来查找表中的单个记录。此表具有关联。不幸的是,我们正试图更改一个关联的字段,所以 Foo是FooId上的Bar的父级 当我们要更改FooId时,它会崩溃,因为EntityRef的HasAlreadyLoaded属性设置为true。除非我对LinqToSql理解得不够透彻,否则我认为在这个记录集上调用SingleOrDefault实际上是在触发查询,从而加载所有相关对象 有没有办法阻止这种情况发生?(ObjectTrackinEnabled和DelferredLoading设置为true)如果不是,该问题的常见解决方案是什么?我们目前还不知道个人关系,我也不想去研究找出关联并根据id加载它们的可能性C# LinqToSql关联加载,c#,linq-to-sql,associations,C#,Linq To Sql,Associations,这可能已经被问过了,但我找不到,所以就来吧 我们使用Context.GetTable()对表进行一般读取,然后附加一个表达式来查找表中的单个记录。此表具有关联。不幸的是,我们正试图更改一个关联的字段,所以 Foo是FooId上的Bar的父级 当我们要更改FooId时,它会崩溃,因为EntityRef的HasAlreadyLoaded属性设置为true。除非我对LinqToSql理解得不够透彻,否则我认为在这个记录集上调用SingleOrDefault实际上是在触发查询,从而加载所有相关对象 有没
我更喜欢的方法是一种不太通用的方法,我也可以这样做。Foo=Context.Foo.Select(x=>x.Id==FooId),但我们现在没有那种奢侈了。在LINQ to SQL中,要更新Association属性,必须将子对象从一个父对象的
EntitySet
移动到另一个父对象的EntitySet
,在将LINQ移动到SQL的过程中,LINQ会自动更新子级的关联属性
例如:
// 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();