小编Tra*_*s B的帖子

为什么我必须为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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在上面创建的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();
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我执行代码时,AppDbContext将在Initializer中正确加载State和County信息,但是当它返回到County Repository时,AppDbContext为空并且由于"State没有无参数构造函数"而会出错.我不希望我的State对象有一个无参数构造函数所以我整天都在寻找解决为什么AppDbContext在County Repository中加载错误的方法.我终于找到了以下解决方案:

加载相关对象时出现异常.实体框架

这是一个简单的解决方案.添加无参数构造函数并将其标记为Obsolete.我这样做了,效果很好.

我的问题是,我为什么要这样做?我使用自定义初始化程序检查了CodeFirst的多个示例,但没有提到需要空构造函数或将其标记为已过时.

是否有更好的解决方案或至少是解释,以便我可以提前知识而不是混乱?

c# ef-code-first dbcontext

16
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×1

dbcontext ×1

ef-code-first ×1