Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.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# 如何使用Find()方法[EF Core]加载TEntity的另一个导航属性的导航属性_C#_Entity Framework Core_Repository Pattern - Fatal编程技术网

C# 如何使用Find()方法[EF Core]加载TEntity的另一个导航属性的导航属性

C# 如何使用Find()方法[EF Core]加载TEntity的另一个导航属性的导航属性,c#,entity-framework-core,repository-pattern,C#,Entity Framework Core,Repository Pattern,我创建了一个通用存储库使用实体框架核心目标.Net 5我创建了一个方法,该方法将接收对象的主键值,它(方法)应选择对象并加载接收到的相关实体 我尝试: public virtual TEntity GetById( object pkValue , params Expression<Func<TEntity , object>>[] relatedEntitiesToBeLoaded ) { // Change DbContex

我创建了一个
通用存储库
使用
实体框架核心
目标
.Net 5
我创建了一个方法,该方法将接收对象的
主键
值,它(方法)应选择对象并加载接收到的相关实体

我尝试:

 public virtual TEntity GetById( object pkValue , params Expression<Func<TEntity , object>>[] relatedEntitiesToBeLoaded )
        {
            // Change DbContext tracking behavior to track all entities
            Context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.TrackAll;

            // Get one object using primary key
            var resultObject = Context.Set<TEntity>().Find( pkValue );

            // Load all selected objects from selected entities
            foreach ( var entityToLoad in relatedEntitiesToBeLoaded )
            {
                Context.Entry( resultObject ).Reference( entityToLoad ).Load();
            }

            return resultObject;
        }
_groupProfSubjectRepository.GetById( id, x => x.Group , x => x.Prof , x => x.SchoolSubject );
 _groupProfSubjectRepository.GetById( id, x => x.Group , x => x.Prof , x => x.SchoolSubject, x=>x.SchoolSubject.FormationYear );
但是,当我尝试加载另一个
tenty的导航属性时,如下面的示例所示:

 public virtual TEntity GetById( object pkValue , params Expression<Func<TEntity , object>>[] relatedEntitiesToBeLoaded )
        {
            // Change DbContext tracking behavior to track all entities
            Context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.TrackAll;

            // Get one object using primary key
            var resultObject = Context.Set<TEntity>().Find( pkValue );

            // Load all selected objects from selected entities
            foreach ( var entityToLoad in relatedEntitiesToBeLoaded )
            {
                Context.Entry( resultObject ).Reference( entityToLoad ).Load();
            }

            return resultObject;
        }
_groupProfSubjectRepository.GetById( id, x => x.Group , x => x.Prof , x => x.SchoolSubject );
 _groupProfSubjectRepository.GetById( id, x => x.Group , x => x.Prof , x => x.SchoolSubject, x=>x.SchoolSubject.FormationYear );
我收到这个错误:

 public virtual TEntity GetById( object pkValue , params Expression<Func<TEntity , object>>[] relatedEntitiesToBeLoaded )
        {
            // Change DbContext tracking behavior to track all entities
            Context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.TrackAll;

            // Get one object using primary key
            var resultObject = Context.Set<TEntity>().Find( pkValue );

            // Load all selected objects from selected entities
            foreach ( var entityToLoad in relatedEntitiesToBeLoaded )
            {
                Context.Entry( resultObject ).Reference( entityToLoad ).Load();
            }

            return resultObject;
        }
_groupProfSubjectRepository.GetById( id, x => x.Group , x => x.Prof , x => x.SchoolSubject );
 _groupProfSubjectRepository.GetById( id, x => x.Group , x => x.Prof , x => x.SchoolSubject, x=>x.SchoolSubject.FormationYear );
ArgumentException:表达式“x=>x.SchoolSubject.FormationYear” 不是有效的成员访问表达式。表达式应该是 表示简单属性或字段访问:“t=>t.MyProperty”。 (参数“memberAccessExpression”)

要显示代码详细信息,我的存储库是一个searated项目,您可以查看代码


请提供任何帮助以解决此问题?

根据此文档


嵌套对象(复合体类型)不受支持。

但它与<代码>() >方法应考虑从“代码>查找”/代码>方法和显式加载到“代码> > FrestRealSuth。另请参见,关于显式加载,请参见和,但是它需要处理传递的表达式,提取和分离“引用”部分,以便能够链接
引用
调用,直到达到所需级别。请您提供一个示例作为回答,我真的很感激你兄弟因为这是你第二次帮忙me@IvanStoev请您为我提供一个示例作为最后一个示例
x=>x.SchoolSubject.FormationYear
的答案,您需要以某种方式执行
Context.Entry(resultObject).Reference(x=>x.SchoolSubject.Query()。Include(y=>y.FormationYear).Load(),但如何通过传递表达式的方式准确地实现这一点很困难(此时无法编写代码,但需要使用
表达式
s)