Подтвердить что ты не робот

Почему у меня должен быть конструктор без параметров для Code First/Entity Framework

Это скорее вопрос "Почему мы делаем вещи", так как моя фактическая проблема была решена, но я не знаю почему.

Я имел дело со следующим кодом внутри моего CountyRepository:

public IEnumerable<County> GetCounties(string stateAbbr)
    {
        using (var db = new AppDbContext())
        {
            State state = (from s in db.States
                         where s.Abbr == stateAbbr
                         select s).First();

            return context.Counties.Where(c => c.StateID == state.StateID).ToList();
        }
    }

Созданный выше AppDbContext перейдет к пользовательскому инициализатору:

  public class AppDbContextInitializer : DropCreateDatabaseIfModelChanges<AppDbContext> 
{
    protected override void Seed(AppDbContext context)
    {
        StatesList states = new StatesList();
        context.States.AddRange(states);
        context.Counties.AddRange(new CountiesList(states));

        context.SaveChanges();
    }
}

Проблема заключалась в том, что когда я выполнил код, AppDbContext правильно загрузил информацию о состоянии и графстве в Initializer, но когда он вернулся в репозиторий графства, AppDbContext был пуст и ошибся из-за того, что "State не имеет без параметров конструктор". Я не хотел, чтобы у моего объекта State был конструктор без параметров, поэтому я весь день искал решение проблемы загрузки AppDbContext в репозитории графства. Наконец, я нашел следующее решение:

Исключение при загрузке связанных объектов. Entity Framework

Это было простое решение. Добавьте конструктор без параметров и отметьте его Устаревшим. Я сделал это, и он работал отлично.

Мой вопрос: ПОЧЕМУ я должен это делать? Я прошел через несколько примеров CodeFirst, используя пользовательский инициализатор, и ни один из них не упоминал о необходимости использования пустого конструктора или его устаревании.

Есть ли лучшее решение или, по крайней мере, объяснение, чтобы я мог идти вперед со знаниями вместо путаницы?

4b9b3361

Ответ 1

Должен быть конструктор без параметров, но он может быть внутренним или закрытым. задать вопрос 3