2013-08-23 64 views
1

我有一個MVC項目的形式的域模型和webGUI,我沒有遷移任何DB-內容時,對域模型進行更改,而是我剛剛將連接字符串中的「初始目錄」更改爲新名稱,並且localDB剛剛創建了一個新的(也許是一種愚蠢的方式來完成它,但它已經工作)登錄失敗 - LocalDB,EF,WebSecurity

現在我已經添加了Websecurity,它的工作方式類似於魅力的第一次,但當我改變名稱上的「初始目錄」我得到一個;

「無法打開數據庫‘DEV1’的要求登錄,登錄失敗」

「用戶登錄失敗「我的,大型機\ MYUSER」

在此行中的Application_Start( );

WebSecurity.InitializeDatabaseConnection("EFDbContext", "UserProfile", "UserId", "UserName", autoCreateTables: true); 

如果我對領域模型進行了更改,並將「原始目錄」中的名稱更改爲有效。

我的連接字符串看起來像這樣;

<add name="EFDbContext" connectionString="Data Source=(localDB)\v11.0; Initial Catalog = Dev1;Integrated Security=True; MultipleActiveResultSets=True; Trusted_Connection=True" providerName="System.Data.SqlClient" /> 

和上下文類這樣;

using MyApp.Domain.Entities; 
using System.Data.Entity; 

namespace MyApp.Domain.Concrete 
{ 
    public class EFDbContext : DbContext 
    { 
     public DbSet<SomeData> SomeDataSet{ get; set; }  
     public DbSet<UserProfile> UserProfiles { get; set; } 

    }  
} 

如果我還沒有添加足夠多的信息或代碼,只要你說一句話,我會盡力爲它

這有什麼錯在ConnectionString或EFDContext執行?任何輸入將appriciated :)

+0

您能確認您的應用程序試圖使用的登錄信息是否可以實際登錄並具有訪問Dev1數據庫的適當權限? – Becuzz

+0

是的,當我使用第一個「數據庫」我可以創建/登錄等。 – Tim

+0

如果我註釋掉Websecurity,它也可以。我很好奇我在哪裏搞砸了。 :) – Tim

回答

1

我在聊天中與他交談,並發現他需要更新。希望這將幫助其他人:

  1. 在服務器資源管理器,在數據連接,確保連接是EFDbContext

  2. 在你的Application_Start()方法中添加以下,如果周圍的WebSecurity行語句,以防止初始化發生不止一次:

    System.Data.Entity.Database.SetInitializer<EFDbContext>(new DropCreateDatabaseAlways<EFDbContext>()); 
    // System.Data.Entity.Database.SetInitializer<EFDbContext>(EFDbContext>(null); 
    
    if (!WebMatrix.WebData.WebSecurity.Initialized) 
    { 
        WebSecurity.InitializeDatabaseConnection("EFDbContext", "UserProfile", "UserId", "UserName", autoCreateTables: true); 
    } 
    
  3. 更改初始目錄的連接字符串中的數據庫名稱

+0

我終於找到了它,但現在它是一個兩級火箭。創建數據庫,而不使用websecurity,之後,我啓用它,並再次運行應用程序。我可以創建WebSecurity.InitializeDatabaseConnection在其他地方,當我知道表是起作用嗎? – Tim

+0

我更新了我的答案。 d DropCreateDatabaseIfModelchanges,但由於這是第一次運行該程序,因此沒有任何模型,因此線路未被調用且表格未被創建。如果我們將其更改爲DropCreateDatabaseAlways,它應該創建表,然後WebSecurity.Initialze應該可以工作。確保您評論DropCreateDatabaseAlways行並取消註釋下面的行,否則每次運行程序時都會丟棄數據庫。 – Andrew

+0

我試過上面的代碼,但我仍然有相同的登錄錯誤。我也許堅持「兩步走」的靈魂? – Tim