2013-06-13 20 views
14

Jestem całkowicie nowy w używaniu MVC i próbuję użyć inicjalizatora do zainicjowania danych w moim DB, gdy aplikacja jest uruchamiana po raz pierwszy. Oto co mam w Global.asax.cs:Nie można usunąć bazy danych, ponieważ jest ona obecnie w użyciu MVC

System.Data.Entity.Database.SetInitializer(new MyAppInitializer()); 
MyAppContext db = new MyAppContext(); 
db.Database.Initialize(true); 

w pliku web.config, tu jest mój ciąg połączenia:

<connectionStrings> 
    <add name="MyAppContext" 
    connectionString="data source= MyServer; Integrated Security=True; database=MyDatabase" 
    providerName="System.Data.SqlClient"/> 

to za pomocą MS SQL 2008 R2 . Moja Initializer wygląda następująco:

public class MyAppInitializer : DropCreateDatabaseAlways<MyAppContext> 
{ 
    protected override void Seed(MyAppContext context) 
    { 
     var organizations = new List<Organizations> 
     { 
      new Organizations { OrgName = "AT", OrgPhone = 5093333433, OrgOfficeLocation = "ITB", OrgPointOfContact = "Tony", OrgIsActive = 1 }, 
      new Organizations { OrgName = "Libraries", OrgPhone = 5093331122, OrgOfficeLocation = "Holland-Terrell", OrgPointOfContact = "Herald", OrgIsActive = 1 } 
     }; 
     organizations.ForEach(s => context.Organizations.Add(s)); 
     context.SaveChanges(); 

Zrobiłem pewien Zamknęłam połączenie do serwera i bazy danych w SQL Server Management Studio, ale wiele osób ma dostęp do tego DB, choć nikt nie powinien używać go teraz. Jak mogę to zrobić, aby móc zainicjować te dane w moim DB? Dzięki!

Edytuj: Mam już utworzoną bazę danych na serwerze, ale jest ona całkowicie pusta (brak tabel, procedur itp.). Czy to spowoduje problem?

Odpowiedz

19

W SSMS uruchomić coś takiego ...

USE master -- be sure that you're not on MYDB 
ALTER DATABASE MYDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
DROP DATABASE MYDB; 
+0

Dostaję błąd składniowy: niepoprawna składnia w pobliżu "NATYCHMIAST" Wyjąłem to i uruchomiłem, ale ono trwało tylko około 5 minut zanim go zatrzymałem, w którym to przypadku otrzymałem ten błąd: Żądanie TRANSAKCJI ROLLBACK nie odpowiada POCZĄTEK TRANSAKCJI. – SantasNotReal

+0

WITH ROLLBACK IMMEDIATE – Sam

+0

Działa dla *** LocalDB *** przy użyciu _mdf file_? za pomocą 'Data Source = (LocalDB) \ v11.0; AttachDbFilename = | DataDirectory | \ wingtiptoys.mdf; Integrated Security = True' – Kiquenet

41

wychodził podobny problem dzisiaj przy użyciu MVC codefirst. Po 20 minutach wypróbowania różnych rzeczy zauważyłem, że zakładka "Server Explorer" w Visual Studio miała połączenie otwarte z moją bazą danych. Po "zamknięciu" połączenia na karcie eksploratora serwerów w visual studio, kod mógł uruchomić i automatycznie odtworzyć bazę danych.

+1

Funny, Visual Studio (przy użyciu VS 2015), otwarte połączenie i nie może obsłużyć tej sprawy sam! –

+1

@TwoPea Miałem ten sam problem z LocalDb, który jest używany w przykładowym projekcie MVC. Twoje rozwiązanie to rozwiązało. – nam

+0

To jest rzeczywiste rozwiązanie i powinno być akceptowane jako odpowiedź, – Thinking

2

W oknie "Usuń" SSMS upewnij się, że zaznaczone jest "Zamknij istniejące połączenia".

+0

Po wypróbowaniu wszystkich tych sposobów, aby db obniżył, zamknąłem SSMS, zamknąłem połączenia danych w VS, a następnie zamknąłem VS. Otwarty VS, sprawdzony, aby upewnić się, że połączenia są nadal zamknięte, uruchomił aplikację. To się udało. – JaneH

0

Zamknięcie wszystkich istniejących połączeń bazy danych w Visual Studio Explorer i studio SQLManagement rozwiązało problem dla mnie.

+0

Czy mogę to zrobić *** programowo *** _in Visual Studio Server Explorer? – Kiquenet

6

VS2015 close DB connection Jak opisano w Vardhini ... Zamknij połączenie DB w Server Explorer.

+0

'ZMIENIAJ BAZY DANYCH MYDB USTAWIĆ SINGLE_USER WITH ROLLBACK IMMEDIATE' dotyczy *** LocalDB ***? – Kiquenet

0

Moje spostrzeżenia są następujące:

  1. Nie można zalogować się do aplikacji
  2. nie może być podłączony do DB z serwera Explorer
  3. nie może być połączony z SSMS

Następnie aplikacja odbudować DB nawet gdy Database.SetInitializer<DbContext>(new DbInitializer()); jest w public DbContext(); - NIE jest tak jak inne answears, które można umieścić w

+0

Po wykonaniu wszystkich tych czynności, aby db obniżyć, zamknąłem SSMS, zamknąłem połączenia danych w VS, a następnie zamknąłem VS. Otwarty VS, sprawdzony, aby upewnić się, że połączenia są nadal zamknięte, uruchomił aplikację. To się udało. – JaneH

Powiązane problemy