相关疑难解决方法(0)

检测到实体框架自引用循环

我有一个奇怪的错误.我正在试验.NET 4.5 Web API,实体框架和MS SQL Server.我已经创建了数据库并设置了正确的主键和外键以及关系.

我创建了一个.edmx模型并导入了两个表:Employee和Department.一个部门可以有很多员工,这种关系存在.我使用scaffolding选项创建了一个名为EmployeeController的新控制器,以使用Entity Framework创建一个带有读/写操作的API控制器.在向导中,选择Employee作为模型,并选择数据上下文的正确实体.

创建的方法如下所示:

public IEnumerable<Employee> GetEmployees()
{
    var employees = db.Employees.Include(e => e.Department);
    return employees.AsEnumerable();
}
Run Code Online (Sandbox Code Playgroud)

当我通过/ api/Employee调用我的API时,出现此错误:

'ObjectContent`1'类型无法序列化内容类型'application/json的响应主体; ... ... System.InvalidOperationException","StackTrace":null,"InnerException":{"Message":"发生错误.","ExceptionMessage":"使用类型'System.Data.Entity.DynamicProxies检测到自引用循环.Employee_5D80AD978BC68A1D8BD675852F94E8B550F4CB150ADB8649E8998B7F95422552' .Path'[0] .Department.Employees'.","ExceptionType":"Newtonsoft.Json.JsonSerializationException","StackTrace":"...

为什么它自引用[0] .Department.Employees?这并没有多大意义.如果我在我的数据库中进行循环引用,我希望这会发生,但这是一个非常简单的例子.怎么可能出错?

c# serialization entity-framework-4 asp.net-web-api

100
推荐指数
10
解决办法
9万
查看次数

为什么我们使用ViewModels?

我最近开始作为Web开发人员工作.我使用ASP .NET MVC 4和NHibernate.

在我的工作场所,我们严格使用视图模型在控制器和视图之间来回传输数据.并且视图模型不应包含模型的任何对象.我知道它是控制器和视图之间的一种层.

但是我发现编写一个viewmodel类是重复和冗余的,即使我们可以直接将模型的对象发送到视图(在大多数情况下).

例如,如果我想显示订单,我可以在控制器的操作中执行此操作 -

return View(Repository.Get<Order>(id));
Run Code Online (Sandbox Code Playgroud)

但相反,我必须编写一个viewmodel,用获取的顺序填充它,然后将其传递给视图.

所以,我的问题是,当我们可以使用模型的对象时,编写视图模型的目的是什么?

asp.net-mvc

24
推荐指数
1
解决办法
7828
查看次数