2012-05-31 51 views
0

我想部署我的第一個MVC網站(使用arvixe作爲我的主機),並且遇到數據庫問題。當我在本地進行開發時,我改變了我的模型(映射到我的DbContext)上的任何東西,它會清除我的數據庫並創建一個新的數據庫(如果存在的話)或完全爲我的實體創建數據庫。使用Code First EF部署MVC 3也使用Web Deploy

這樣說,我的問題是當我部署它時,我的項目已經部署了所有的控制器,並且我可以訪問我的登錄頁面,但是一旦我嘗試登錄(這會觸發在本地創建數據庫)它只會給我一個錯誤,並不會嘗試創建數據庫。

不知道我在步驟中缺少的是什麼,我是否應該至少在沒有記錄的情況下創建數據庫?

回答

0

這聽起來像是一個權限問題。您在服務器上運行的帳戶很可能沒有DROP/CREATE表的權限。

部署到生產/託管服務器時,我通常不依賴EF來創建我的模式。我將我的DEV環境中的CREATE tabel腳本複製到PRODUCTION,並確保我的DBCONTEXT初始化代碼已設置爲不作任何更改。

+0

這看起來像是去,我只是讀這個>的方式源http://stackoverflow.com/a/10760985/639713,顯然我必須生成腳本來運行?是對的嗎?我試圖做到這一點,它已經15分鐘,沒有表創建..不知道什麼是錯的..也,你是什麼意思「確保我的DBCONTEXT intialisation代碼設置不作任何改變。」 ? – gdubs

+0

如果您有'DbDatabase.SetInitializer (新的DropCreateDatabaseIfModelChanges ()); '您可能需要將DropCreateDatabaseIfModelChanges更改爲其他設置 – Daveo

0

試試這個:

using System.Data.Entity; 
using System.Data.Entity.Migrations; 
using System.Data.Entity.ModelConfiguration.Conventions; 
public class YourDbContext: DbContext 
{ 
    public YourDbContext() 
     : base("name = YourConnection") 
    { 
     Database.SetInitializer<YourDbContext>(new MigrateDatabaseToLatestVersion<YourDbContext, YourMigrationsConfiguration>()); 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     //Your Building Rules 
    } 

    #region DbSets 
    public DbSet<YourTable> YourTables { get; set; } 
    #endregion 
} 

public class YourMigrationsConfiguration : DbMigrationsConfiguration<YourDbContext> 
{ 
    public YourMigrationsConfiguration() 
     : base() 
    { 
     AutomaticMigrationsEnabled = true; 
     AutomaticMigrationDataLossAllowed = true; 
    } 

    protected override void Seed(YourDbContext context) 
    { 
     /*sql script*/ 
    } 
} 
0

因此很明顯,我可以做我的應用程序確實在我的地方到我的主機同樣的事情,唯一的辦法是讓系統管理員的權限/帳戶降質數據庫。這不會發生......所以我決定只生成一個腳本並遠程運行它。我不確定一旦開始對錶格進行修改並對數據進行維護,它將如何影響我的數據庫。祝我好運。

哦順便說一句,這是我的腳本

https://stackoverflow.com/a/10760985/639713