开发者

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

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 comp开发者_运维百科licated it is.

For which one would you vote and why?


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜