[英]Why must I have a parameterless constructor for 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中正確加載State和County信息,但是當它返回到County Repository時,AppDbContext為空並且由於“State沒有無參數構造函數”而會出錯。 我不希望我的State對象有一個無參數構造函數所以我整天都在尋找解決為什么AppDbContext在County Repository中加載錯誤的方法。 我終於找到了以下解決方案:
這是一個簡單的解決方案。 添加無參數構造函數並將其標記為Obsolete。 我這樣做了,效果很好。
我的問題是,我為什么要這樣做? 我使用自定義初始化程序檢查了CodeFirst的多個示例,但沒有提到需要空構造函數或將其標記為已過時。
是否有更好的解決方案或至少是解釋,以便我可以提前知識而不是混亂?
必須有一個無參數的構造函數,但它可以是內部的或私有的。 參考問題3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.