我遇到了一个奇怪的错误。我正在尝试使用.NET 4.5 Web API、Entity Framework和MS SQL Server进行实验。我已经创建了数据库并设置了正确的主键、外键和关系。
我创建了一个 .edmx 模型,并导入了两个表:Employee 和 Department。一个部门可以有很多员工,这种关系是存在的。我使用脚手架选项创建了一个名为 EmployeeController 的新控制器,用 Entity Framework 创建了一个具有读/写操作的 API 控制器。在向导中,我选择了 Employee 作为模型和数据上下文的正确实体。
生成的方法看起来像这样:
public IEnumerable<Employee> GetEmployees()
{
var employees = db.Employees.Include(e => e.Department);
return employees.AsEnumerable();
}
当我通过 /api/Employee 调用我的API时,出现以下错误:
“ObjectContent`1”类型无法序列化响应正文,其内容类型为 “application/json; ...System.InvalidOperationException”,“StackTrace”:null,“InnerException”:{"Message":"An error has occurred.","ExceptionMessage":"检测到自引用循环,类型为 'System.Data.Entity.DynamicProxies.Employee_5D80AD978BC68A1D8BD675852F94E8B550F4CB150ADB8649E8998B7F95422552'。路径 '[0].Department.Employees'。","ExceptionType":"Newtonsoft.Json.JsonSerializationException","StackTrace":" ...
为什么会出现 [0].Department.Employees 的自引用循环?这看起来并不合理。如果我的数据库中存在循环引用,我会期望发生这种情况,但这只是一个非常简单的例子。可能出了什么问题?
Application_Start
中有上述代码并且在相关属性上有[JsonIgnore]
,但我仍然遇到了自引用循环错误。我还在这些属性上使用了[IgnoreDataMember]
,并且为实体框架设置了ProxyCreationEnabled
为false
。 - Brian Gradin