我使用 EF 4.1 Database First 方法,使用 T4 模板在单独的程序集中生成 POCO 类。我有用于获取数据的存储库,以及用于与 UI 通信的服务层。
我试图制作级联下拉菜单。
我是 MVC 和 EF 4.1 的新手,因此我在 stackoverflow 中搜索了可能的解决方案。
这是示例视图模型类:
public class MyViewModel
{
public int CustomerId { get; set; }
public string CustomerName { get; set; }
public IEnumerable<Phone> Phones { get; set; }
}
到目前为止我读到的解决方案是:
Use ScriptIgnoreAttribute
in
System.Web.Script.Serialization
在
引用属性 - 我不
真的很想这样做,因为我
不想添加参考
我的 POCO 项目中的 System.Web
在 EF 4.1 DbContext 中禁用延迟加载 - 我不确定是否要在我的项目中使用 Include
返回匿名类型 - 当我的项目变大时,这种方法会遇到问题吗?
使用 ViewModel - 假设我有一个可以拥有 1 部或多部手机的客户。在第一个下拉列表中,您可以选择客户,在第二个下拉列表中,您可以显示他的所有电话。
但这不会在我的 Phones 对象上生成循环异常吗?或者我会为我的 Phone 对象创建一个特殊的类?这似乎有很多不必要的代码。
使用 AutoMapper - 没有使用 AutoMapper 的经验,所以我不知道它有多复杂。
您会投票给哪一个?为什么?
使用视图模型和自动映射器 http://automapper.org/在域模型和要发送到视图的视图模型之间进行映射。通过这种方式,您可以完全控制发送到视图的属性,从而减少服务器和客户端之间发送的数据量。另外,因为现在您正在使用视图模型,所以您的代码对域实体中的修改更具弹性。如果您修改它们,只有映射层会受到影响,因此您将不需要触摸控制器或视图。
所以我的建议是下载 AutoMapper,阅读文档并开始使用它。这是一个生活的改变,相信我。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)