簡體   English   中英

為什么我必須為Code First / Entity Framework提供無參數構造函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM