Это скорее вопрос "Почему мы делаем вещи", так как моя фактическая проблема была решена, но я не знаю почему.
Я имел дело со следующим кодом внутри моего 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, используя пользовательский инициализатор, и ни один из них не упоминал о необходимости использования пустого конструктора или его устаревании.
Есть ли лучшее решение или, по крайней мере, объяснение, чтобы я мог идти вперед со знаниями вместо путаницы?