Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LinqToSql关联加载_C#_Linq To Sql_Associations - Fatal编程技术网

C# LinqToSql关联加载

C# LinqToSql关联加载,c#,linq-to-sql,associations,C#,Linq To Sql,Associations,这可能已经被问过了,但我找不到,所以就来吧 我们使用Context.GetTable()对表进行一般读取,然后附加一个表达式来查找表中的单个记录。此表具有关联。不幸的是,我们正试图更改一个关联的字段,所以 Foo是FooId上的Bar的父级 当我们要更改FooId时,它会崩溃,因为EntityRef的HasAlreadyLoaded属性设置为true。除非我对LinqToSql理解得不够透彻,否则我认为在这个记录集上调用SingleOrDefault实际上是在触发查询,从而加载所有相关对象 有没

这可能已经被问过了,但我找不到,所以就来吧

我们使用Context.GetTable()对表进行一般读取,然后附加一个表达式来查找表中的单个记录。此表具有关联。不幸的是,我们正试图更改一个关联的字段,所以

Foo是FooId上的Bar的父级

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

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


我更喜欢的方法是一种不太通用的方法,我也可以这样做。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();