我正在寻找使用 EF 数据库优先方法和 MVC 4.5/Web API 构建 Web 应用程序的最简单、最佳实践的方法。我的应用程序将使用 Angular 框架进行 ajax 调用以按需检索 json 数据。
目前,我收到过多且结构不良的数据以响应我的 api 调用,并且想知道如何清理这些数据。
该应用程序将提供工作跟踪,所以我有如下表格:
Person
Id
Name
Email
Department : FK -> Department
Department
Id
Name
Jobs
Id
RequestedBy : FK -> Person
AssignedTo : FK -> Person
JobHistory
Id
JobId : FK -> Jobs
所以,理想情况下,当我打电话
$http.get(/api/People)
我会得到:
[{Name: 'alice', Email: 'alice@here.com', Department: 'ABC'},
{Name: 'bob', Email: 'bob@here.com', Department: 'CDE'}]
我想这意味着通常会急切加载主要实体,但不是所有其他依赖于 Person 的表。但是有时我想使用这些反向引用来获取个人可能正在从事或已要求的所有工作。
如果可能的话,我宁愿不必求助于修改 T4 模板之类的事情。虽然这很聪明,但它不是很灵活。此外,我不喜欢得到电动工具的想法,并告诉我在使用它之前必须研究原理图并重新连接内部。我不是专业的开发人员,我真的想专注于工作,而不是工具;Linq2Sql 非常适合这一点。当然,如果修改内脏是正确的答案,我会接受的。
这似乎是对 Web API 的直接使用,我确信我错过了一些明显的东西。
谢谢
编辑
最有可能导致我的部分问题的附加信息。在某些时候,为了使上述内容起作用,我在 Global.asax.cs 中添加了以下内容:
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.All;
通过预先加载,Jobs 中引用 Person 的两个字段会导致循环引用。上面的代码允许 Json.Net 对其进行序列化,但会用不需要的数据填充 json。我相信解决方案是以某种方式切换到延迟加载,但这可以在数据库优先方法中完成吗?