Best solution for EF 4.1 + MVC + JSON circular reference exception?

£可爱£侵袭症+ 提交于 2019-12-10 15:57:59

问题


I'm using EF 4.1 Database First approach, with T4 template generating my POCO classes in separate assembly. I have repositories for fetching data, and service layer which is used for communication with UI.

I was trying to make cascading dropdowns. I'm new in MVC and EF 4.1, so I searched stackoverflow for possible solutions.

This is sample viewmodel class:

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

What I have read so far, solutions are:

  1. Use ScriptIgnoreAttribute in System.Web.Script.Serialization on referencing properties - I don't really want to do this, because I don't want to add reference to System.Web in my POCO project

  2. Disable Lazy Loading in EF 4.1 DbContext - I'm not sure do I want to use Include thorough my project

  3. Return anonymous types - will I have problems with this approach when my project gets big?

  4. Use a ViewModel - suppose I have a Customer which can have 1 or more phones. In first dropdown list you can select Customer, and in second dropdown you display all of his phones.
    But wouldn't this generate a circular exception on my Phones object? Or i would make a special class for my Phone object? That seems like a lot of unnecesarry code.

  5. Use AutoMapper - don't have experience with AutoMapper, so I don't know how complicated it is.

For which one would you vote and why?


回答1:


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.



来源:https://stackoverflow.com/questions/6622430/best-solution-for-ef-4-1-mvc-json-circular-reference-exception

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!