2015-05-29 115 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”)});'' –