私の実際の問題は解決されましたが、なぜなのか分かりません。
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が州と郡の情報をイニシャライザに正しくロードするコードを実行したときに、郡リポジトリに戻ったときにAppDbContextが空であり、「状態にパラメータのないコンストラクタがないため」エラーが発生することでした。 Stateオブジェクトにパラメーターのないコンストラクターを持たせたくなかったので、AppDbContextが郡リポジトリに読み込まれる理由の解決策を一日中探しました。私は最終的に次の解決策を見つけました:
関連オブジェクトのロード時の例外。EntityFramework
それは簡単な解決策でした。パラメーターなしのコンストラクターを追加し、廃止とマークします。私はこれを行い、それは完全に機能しました。
私の質問は、なぜこれをしなければならないのですか?カスタム初期化子を使用して、CodeFirstの複数の例を調べましたが、空のコンストラクターを必要とする、またはそれをObsoleteとマークする例はありませんでした。
混乱の代わりに知識を進めることができるように、より良い解決策または少なくとも説明はありますか?
パラメータのないコンストラクタが必要ですが、内部またはプライベートにすることができます。 質問3を参照