У меня есть простая модель, которая, когда я запускаю веб-сайт в отладчике, в структуре сущности неправильно заполняет модель.Объекты дочерних объектов Entity Framework, не заселяющие
Модель проста:
public class Team
{
/// <summary>
/// Constructor required for the EntityFramework to create the object.
/// </summary>
private Team()
{
}
public Team(string name, ApplicationUser owner)
{
Name = name;
Owner = owner;
}
[Required]
public int Id { get; private set; }
[Required]
public string Name { get; private set; }
[Required]
public ApplicationUser Owner { get; private set; }
[Required]
public List<TeamMembership> Members { get; set; }
}
public class TeamMembership
{
/// <summary>
/// Constructor for the EntityFramework
/// </summary>
private TeamMembership()
{
}
public TeamMembership(ApplicationUser user, MembershipStatus status)
{
User = user;
Status = status;
}
[Required]
public ApplicationUser User { get; private set; }
[Required]
public MembershipStatus Status { get; set; }
[Required]
public int Id { get; private set; }
}
Где ApplicationUser
класс по умолчанию генерируется инфраструктурой членства ASP MVC 5.
Когда я запускаю свои тесты (Specflow), которые создают новую базу данных LocalDb с уникальным идентификатором для каждого теста и запускают миграции на этом db, структура сущности правильно заполняет мою команду и владельца.
Однако, когда я запускаю веб-сайт и пытаюсь взаимодействовать с приложением, моя группа не заполнена полностью, потому что Владелец null
и Members
не заполнен. Но идентификатор владельца правильно установлен в базе данных, и запрос выглядит нормально. Запросы, выполняемые во время теста и запуска приложения, кажутся одинаковыми.
Почему это может быть и как я могу начать отлаживать проблему?
Я чувствую, что мне не хватает чего-то простого.
Спасибо Стив. Это действительно помогло решить эту проблему. Однако я немного смущен тем, почему мои интеграционные тесты (которые вызывают методы на контроллере) работают и имеют полные населенные объекты. Это из-за времени жизни контекста? Я думаю, что мои тесты создают контекст для срока службы теста, который может быть несколькими вызовами метода контроллера, а при запуске в IIS SimpleInjector создаст DBC-текст для каждого вызова. Но dbcontext не должен был быть удален между загрузкой команды и перемещением владельца/членов. –
Если контекст не был удален (и объект все еще привязан к контексту), и вы получаете доступ к свойству навигации, EF должен ударить база данных снова, чтобы захватить эту сущность. Если контекст расположен, это не может произойти. Я добавлю ссылку на ответ для получения дополнительной информации. – Steve
Будет ли сущность по-прежнему привязана к контексту, если она явно не была отсоединена? –