在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;数据库中的工作实体。
因此在执行db.SaveChanges();
时出现以下错误:
无效的对象名称'dbo.Employees'
可能是什么问题?
答案 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