Добавить объект в контекст и получить свойства из отношения - PullRequest
0 голосов
/ 11 ноября 2011

Некоторое время назад я создал некоторый код, который сначала добавляет объект в мою таблицу с кодом структуры сущности.

Context.Reactions.Attach(reaction);
Context.SaveChanges();

После этого я использовал отношение под названием Profile, чтобы получить имя пользователя, который разместилреакция.

reaction.Profile.FirstName + " " + reaction.Profile.LastName

Теперь через некоторое время я получаю нулевую ссылку в Профиле, когда пытаюсь получить имя человека.

Так почему я не могу добавить объект и после этого использовать отношение Profile?

Редактировать: Я получаю нулевую ссылку на свойство отношения Profile.Итак, реакция. Профайл говорит, что это ноль.Это тот же экземпляр.Entity Framework дал мне идентификатор реакции, поэтому работает savechanges ().Строка для получения FirstName - это строка непосредственно после SaveChanges, поэтому контекст не может быть расположен верно?

Полный код:

var reaction = new Reaction()
                                {
                                    Text = reactionText,
                                    ProfileId = CurrentProfileId,
                                    PostedOn = DateTime.Now
                                };

                    //Save changes to the backend
                    context.Reactions.Add(reaction);
                    context.SaveChanges();

                    return Json(new
                    {
                        Id = reaction.Id,
                        ReactionType = reactionType,
                        ReactionTypeId = reactionTypeId,
                        ReactionText = reaction.Text,
                        PostedOn = reaction.PostedOn.ToString("G"),
                        ProfileName = string.Format("{0} {1}", reaction.Profile.FirstName, reaction.Profile.LastName)
                    });

Я даже пытался использовать этот код вокруг него.

using (var context = new SeeTingsContext())
                {
                    context.Configuration.LazyLoadingEnabled = true;


                }

1 Ответ

0 голосов
/ 12 ноября 2011

Я не совсем понял вас, когда прочитал after a while. Значит ли это, что вы сначала получаете объект отношения, а затем он внезапно становится нулевым?
Мое предположение:

  • Вы не установили для LazyLoadingEnabled значение true для контекста, над которым работаете.
  • Ваш контекст расположен, и поэтому вы не можете использовать его, чтобы получить отношения. Обратите внимание, что вы можете использовать отложенную загрузку, пока ваш контекст еще существует.

Обновление : На основе комментариев попробуйте явно загрузить отношение и посмотреть, сможете ли вы получить профиль:

if (!context.Entry(reaction).Reference(r => r.Profile).IsLoaded)
{
    context.Entry(reaction).Reference(r => r.Profile).Load();
}  

Если вы не можете получить профиль таким способом, я полагаю, что с вашим отображением что-то не так.

...