【发布时间】:2016-03-16 16:29:12
【问题描述】:
我正在尝试创建一个方法,该方法使用 REST Web 服务的反射来访问我的实体框架(数据库优先)上下文。我已经获取了表格并将其转换为退货列表,但是当我尝试使用 Include 获取一些相关表格时遇到了麻烦。
我有几个要测试的表,它们是 Project 和 Person。 Project 对管理项目的人员有一个对 Person 的引用,对一个人管理的所有项目都有一个从 Person 到 Project 的引用。为了让原来的复工我加了
Configuration.ProxyCreationEnabled = false;
Configuration.LazyLoadingEnabled = false;
到我的上下文的类,以便删除引用循环并且 JSON 序列化正常工作。
我面临的问题是我现在试图明确获取所有项目以及与该项目相关的人员记录,而不包括该人员的项目列表。但是当我尝试包含人员时,我收到 JSON 序列化错误,因为它正在拉回循环引用。我目前有以下代码:
Entities context = new Entities();
// Normally these will be a parameters to the calling method
string tableName = "Projects";
string includeTableName = "Person";
System.Reflection.PropertyInfo propertyInfo = context.GetType().GetProperty(tableName);
Type type = propertyInfo.PropertyType;
dynamic list = propertyInfo.GetValue(context);
var include = typeof(QueryableExtensions).GetMethod("Include", new[] { typeof(IQueryable), typeof(string) });
var toList = typeof(Enumerable).GetMethod("ToList").MakeGenericMethod(type.GenericTypeArguments[0]);
list = include.Invoke(null, new object[] { list, includeTableName });
return toList.Invoke(null, new object[] { list });
代码正常执行,但随后我调用我得到以下错误:
"Message":"发生错误。","ExceptionMessage":"检测到类型为'DDBAPI.EntityFramework.Project'的自引用循环。路径'[8].Person.Projects'。"
Include 有没有办法阻止它加载循环引用?我看到了类似的问题,这些问题提到了制作 DTO 以限制返回的内容,但由于通常我不知道我将调用哪个表,所以我不知道我需要哪个 DTO,因为我试图避免任何基于周围的逻辑传入的表名。
【问题讨论】:
标签: c# json entity-framework