我有一个奇怪的错误.我正在试验.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?这并没有多大意义.如果我在我的数据库中进行循环引用,我希望这会发生,但这是一个非常简单的例子.怎么可能出错?
我最近开始作为Web开发人员工作.我使用ASP .NET MVC 4和NHibernate.
在我的工作场所,我们严格使用视图模型在控制器和视图之间来回传输数据.并且视图模型不应包含模型的任何对象.我知道它是控制器和视图之间的一种层.
但是我发现编写一个viewmodel类是重复和冗余的,即使我们可以直接将模型的对象发送到视图(在大多数情况下).
例如,如果我想显示订单,我可以在控制器的操作中执行此操作 -
return View(Repository.Get<Order>(id));
Run Code Online (Sandbox Code Playgroud)
但相反,我必须编写一个viewmodel,用获取的顺序填充它,然后将其传递给视图.
所以,我的问题是,当我们可以使用模型的对象时,编写视图模型的目的是什么?