在AccountContext中添加新属性,EF Code First?

时间:2013-03-17 12:48:10

标签: c# entity-framework asp.net-mvc-4 entity-framework-5

在POC应用程序中,我已经开始使用默认的MVC-4互联网应用程序模板。 我在AccountContext中添加了更多属性:

public class AccountsContext : DbContext
{
    public AccountsContext()
        : base("vs12localdb")
    {
    }

    public DbSet<UserProfile> UserProfiles { get; set; }
    public DbSet<Employee> Employees{ get; set; }
    public DbSet<Work> DailyWorks { get; set; }
}

但是当尝试在HttpPost方法中添加Employee实体时:

    [HttpPost]
    public ActionResult Create(EmployeeViewModel emp)
    {
        if (ModelState.IsValid)
        {
            emp.UserId = WebSecurity.HasUserId ? WebSecurity.CurrentUserId : -1;
            db.Employees.Add(emp);
            db.SaveChanges();  //Causing Error: Invalid object name 'dbo.Employees'.
            return RedirectToAction("Index");
        }

        return View(emp);
    }

我看到实体框架忽略了创建Employee&amp;数据库中的工作实体。 enter image description here

因此在执行db.SaveChanges();时出现以下错误:

  

无效的对象名称'dbo.Employees'

可能是什么问题?

1 个答案:

答案 0 :(得分:2)

您可以将Entity Framework设置为以下内容:

CreateDatabaseIfNotExists<TContext>
DropCreateDatabaseAlways<TContext>

我个人使用CreateDatabaseIfNotExists,如下所示:

public class ContextInitializer : CreateDatabaseIfNotExists<Context>
{
    protected override void Seed(Context ctx)
    {
         // any seed data

    } 

}

确保你在发生这种情况后启动成员资格,在Global.asax中的某处或在那里调用的静态函数:

我通常使用这样的东西:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    WebApiConfig.Register(GlobalConfiguration.Configuration);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
    AuthConfig.RegisterAuth();
    AutoMapperConfig.RegisterConfig();

    Database.SetInitializer(new ContextInitializer());

    using (var context = new Context())
    {
        context.Database.Initialize(false);
    }

    if (!WebSecurity.Initialized)
    {
        WebSecurity.InitializeDatabaseConnection(
            connectionStringName: "DefaultConnection", 
            userTableName: "User", 
            userIdColumn: "Id", 
            userNameColumn: "Email", 
            autoCreateTables: false);
    }
}

如果您计划不断添加,删除实体中的属性并添加新属性,您可能需要查找可以为您更新数据库的Code First迁移。

点击此处了解更多〜Code First Migrations