.net - EF 4.1 + MVC + JSON 循环引用异常的最佳解决方案?

标签 .net json asp.net-mvc-3 entity-framework-4.1 circular-reference

我正在使用 EF 4.1 Database First 方法,使用 T4 模板在单独的程序集中生成我的 POCO 类。我有用于获取数据的存储库和用于与 UI 通信的服务层。

我试图制作级联下拉菜单。
我是 MVC 和 EF 4.1 的新手,所以我在 stackoverflow 中搜索了可能的解决方案。

这是示例 View 模型类:

public class MyViewModel
{
public int CustomerId { get; set; }
public string CustomerName { get; set; }
public IEnumerable<Phone> Phones { get; set; }
}

到目前为止我所读到的,解决方案是:
  • 使用 ScriptIgnoreAttributeSystem.Web.Script.Serialization
    引用属性 - 我不
    真的很想这样做,因为我
    不想添加对
    我的 POCO 项目中的 System.Web
  • 在 EF 4.1 DbContext 中禁用延迟加载 - 我不确定是否要使用 Include 彻底我的项目
  • 返回匿名类型 - 当我的项目变大时,这种方法会出现问题吗?
  • 使用 ViewModel - 假设我有一个可以拥有一部或多部手机的客户。在第一个下拉列表中,您可以选择客户,然后在第二个下拉列表中显示他的所有电话。
    但这不会在我的 Phones 对象上产生循环异常吗?或者我会为我的 Phone 对象创建一个特殊的类?这似乎是很多不必要的代码。
  • 使用 AutoMapper - 没有使用 AutoMapper 的经验,所以我不知道它有多复杂。

  • 你会投票给哪一个,为什么?

    最佳答案

    使用 View 模型和 AutoMapper在您的域模型和您将发送到 View 的 View 模型之间进行映射。通过这种方式,您可以完全控制将哪些属性发送到 View ,从而减少服务器和客户端之间发送的数据量。也因为现在您正在使用 View 模型,您的代码对域实体中的修改更具弹性。如果你修改它们,只有映射层会受到影响,因此你永远不需要触摸你的 Controller 或 View 。

    所以我的建议是下载 AutoMapper,阅读文档并开始使用它。相信我,这改变了生活。

    关于.net - EF 4.1 + MVC + JSON 循环引用异常的最佳解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6622430/

    相关文章:

    .net - 为什么在我向窗体添加控件后 Visual C++ Designer 不工作?

    .net - EF 4.0 - 映射到具有私有(private)字段的只读属性

    javascript - 用 Angular 显示json结果

    java - 用于在 JSON 中存储嵌套元素的数据结构

    asp.net-mvc-3 - ASP.Net MVC 3 检索复选框列表值

    jquery - Javascript block 在 mvc3 razor 模板中呈现为 html 实体字符串

    asp.net-mvc-3 - 当我在 IOC (ninject) 上更改这行代码时,MVC 如何更改要使用的 Controller 构造函数?

    .net - 从 .NET 网络应用程序访问 WIA/TWAIN

    c# - 尝试在数据集中的表之间创建关系时出现异常 : System. NullReferenceException

    Javascript Jquery JSON 发布 - 我的理解正确吗?