2013-03-17 37 views
0

在POC應用程序中,我已經開始使用默認的MVC-4互聯網應用程序模板。 我在AccountContext增加幾個特性:在AccountContext,EF Code First中添加新屬性?

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

我看到實體框架忽略數據庫中創建員工&實體機構開展工作。 enter image description here

因此得到下面的錯誤,而這樣做db.SaveChanges();

無效的對象名稱dbo.Employees「

可能是什麼問題?

回答

2

您可以設置實體框架爲以下內容:

CreateDatabaseIfNotExists<TContext> 
DropCreateDatabaseAlways<TContext> 

我個人使用CreateDatabaseIfNotExists像這樣:

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

    } 

} 

只要確保你Initilizer在此之後,會員發生,在全球的某個地方。 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

+0

什麼是'ContextInitializer'在此行中,Database.SetInitializer(新ContextInitializer()); – Abhijeet 2013-03-17 13:30:29

+0

我之前定義的公共類ContextInitializer,它告訴數據庫我用實體框架指定的配置。 取自文檔: 獲取或設置數據庫初始化策略。當System.Data.Entity.DbContext實例從System.Data.Entity.Infrastructure.DbCompiledModel初始化時,將調用數據庫初始化策略。該策略可以選擇檢查數據庫是否存在,創建新的數據庫,併爲數據庫創建數據。默認策略是System.Data.Entity.CreateDatabaseIfNotExists 的實例。 – 2013-03-17 13:31:52