0

在 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; }
}

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

    [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);
    }

我看到实体框架忽略了在数据库中创建员工和工作实体。 在此处输入图像描述

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

无效的对象名称“dbo.Employees”

可能是什么问题 ?

4

1 回答 1

2

您可以将实体框架设置为以下内容:

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 迁移

于 2013-03-17T13:10:32.770 回答