2015-05-29 3 views
0

У меня есть объект User со слишком большим количеством отношений с другими объектами в системе. И я использую AngularJs и хочу сериализовать объект User на json только с включенными объектами. Вот мой оператор выбора:Entity Framework Сериализовать объект для 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(); 

, но это слишком сложно и много кода для написания. Я ищу идеальное или лучшее решение.

Thanks

+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, «Профиль», «Mail.Messages»)}); ' –

Смежные вопросы