4

我正在使用 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; }
}

到目前为止,我所阅读的解决方案是:

  1. ScriptIgnoreAttribute在 引用属性上使用System.Web.Script.Serialization- 我真的不想这样做,因为我不想在我的 POCO 项目中添加对 System.Web 的引用

  2. 在 EF 4.1 DbContext 中禁用延迟加载 - 我不确定我是否要在我的项目中使用 Include

  3. 返回匿名类型 - 当我的项目变大时,我会遇到这种方法的问题吗?

  4. 使用 ViewModel - 假设我有一个可以拥有 1 部或更多部手机的客户。在第一个下拉列表中您可以选择客户,在第二个下拉列表中您可以显示他的所有电话。
    但这不会在我的 Phones 对象上产生循环异常吗?或者我会为我的电话对象创建一个特殊的类?这似乎是很多不必要的代码。

  5. 使用 AutoMapper - 没有使用 AutoMapper 的经验,所以我不知道它有多复杂。

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

4

1 回答 1

5

Use a view model and AutoMapper to map between your domain models and the view model which you will be sending to the view. This way you have total control over what properties are sent to the view which as a consequence reduces the amount of data sent between the server and the client. Also because now you are using view models your code is more resilient to modifications in your domain entities. If you modify them, only the mapping layer will be affected and thus you will not ever need to touch to your controllers or views.

So my advice is to download AutoMapper, read the documentation and start using it. It's a life changer, believe me.

于 2011-07-08T10:19:38.027 回答