2015-05-29 159 views
0

我有一個User實體,它與系統中的其他實體有太多關係。我正在使用AngularJs,並且想要將User實體序列化爲僅包含實體的json。 這裏是我的select語句:實體框架將實體序列化爲包含相關實體的JSON

var users = unc.Users.Include("Profile").ToList(); 

序列化時,這JSON它總是會導致成

The operation cannot be completed because the DbContext has been disposed 

我使用的只是選擇每一列,我需要在我看來像這樣來解決這個問題:

var users = unc.Users.Select(x => new { x.Id ,x.Username,Role=x.Role.Name,x.Email,x.Profile.Name,x.UpdatedAt,x.CreatedAt}).ToList(); 

但這太難了,代碼太多了。我正在尋找理想或更好的解決方案。

謝謝

+0

如果你做了一個ToList(),你不應該得到那個消息。您的序列化代碼是否參考了上下文? –

+0

@SteveGreene事實上,它正確的獲取該消息,因爲當您序列化實體時,json序列化器將嘗試序列化該實體的所有屬性ownd,以便您將獲得該消息。 –

+0

也許看看你的上下文的生命週期並擴展它。 http://stackoverflow.com/questions/18261732/the-operation-cannot-be-completed-because-the-dbcontext-has-been-disposed-exce –

回答

0

我在這裏找到了一個體面的解決方案。 https://efjson.codeplex.com/

這將序列化您的實體,但不包括相關實體,除非您想包含這些實體。這將避免進入由實體通過顛倒的屬性調用彼此返回的循環循環。 也可以序列化您想要的相關實體,這樣可以很容易地將實體序列化並通過JSON返回到AngularJs之類的腳本。

希望這會讓其他人快樂:)

+0

如果你已經有你想要存儲在變量中的實體,你可以就像這樣'return new Json(new {Done = unc.SaveChanges()> 0,User = JsonHelper.ConvertToSimpleObject(userObj,「Profile」,「Mail.Messages」)});'' –