Do celów testowych chciałbym ręcznie usunąć i ponownie utworzyć bazę danych za pomocą EF CodeFirst CTP5. Jak to zrobić?EF CodeFirst CTP5 - Ręcznie upuść i utwórz DB?
Odpowiedz
DbDatabase klasa dostępny jako własność na swojej DbContext obiekt oferuje zestaw metod do pracy z bazą danych bezpośrednio. Można użyć Tworzenie i Usuń metody dla tej sprawy:
using (var context = new YourContext())
{
context.Database.Delete();
context.Database.Create();
// Or
context.Database.CreateIfNotExists();
}
I nie zapomnij zamknąć żadnego połączenia z bazą danych (z poziomu Visual Studio), inaczej dostaniesz wyjątek mówiąc, że baza danych jest używana ... –
Wywołanie Database.Donnection.Close() przed Database.Delete() nie pomaga. Nadal masz komunikat, że baza danych jest w użyciu. – Greg
Greg, to dlatego, że baza danych naprawdę jest w użyciu. Możesz go otworzyć w Eksploratorze serwerów - spróbuj najpierw zamknąć to połączenie. – mjohnsonengr
Zdaję sobie sprawę, to jest stare, ale nie mogłem dostać przyjętego rozwiązania pracuje tak Przewróciłam szybkie rozwiązanie ...
using System;
using System.Data.Entity;
namespace YourCompany.EntityFramework
{
public class DropDatabaseInitializer<T> : IDatabaseInitializer<T> where T : DbContext, new()
{
public DropDatabaseInitializer(Action<T> seed = null)
{
Seed = seed ?? delegate {};
}
public Action<T> Seed { get; set; }
public void InitializeDatabase(T context)
{
if (context.Database.Exists())
{
context.Database.ExecuteSqlCommand("ALTER DATABASE " + context.Database.Connection.Database + " SET SINGLE_USER WITH ROLLBACK IMMEDIATE");
context.Database.ExecuteSqlCommand("USE master DROP DATABASE " + context.Database.Connection.Database);
}
context.Database.Create();
Seed(context);
}
}
}
To działa dla mnie i umożliwia łatwe wysiewanie.
To działa dla mnie, ale nie dla dave odpowiedzi w ramach encji 5.0. Będziesz musiał wywołać wyskok bazy danych podobny do zapytania, aby uruchomić akcję.
Global.asax
Database.SetInitializer<MedicalVarianceDataContext >(new DataInitializer());
indziej
public class DropDatabaseInitializer<T> : IDatabaseInitializer<T> where T : DbContext, new()
{
public DropDatabaseInitializer(Action<T> seed = null)
{
}
protected virtual void Seed(T context) { }
public void InitializeDatabase(T context)
{
if (context.Database.Exists())
{
context.Database.ExecuteSqlCommand("ALTER DATABASE " + context.Database.Connection.Database + " SET SINGLE_USER WITH ROLLBACK IMMEDIATE");
context.Database.ExecuteSqlCommand("USE master DROP DATABASE " + context.Database.Connection.Database);
}
context.Database.Create();
Seed(context);
}
}
Chyba będzie trzeba także dodać context.savechanges();
protected override void Seed(MedicalVarianceDataContext context)
{
new List<ViewLookUpIndividualUnit>{
new ViewLookUpIndividualUnit{ MvrsIndividualUnit="Clinic" ,Active=true}
}.ForEach(k => context.ViewLookUpIndividualUnits.Add(k));
base.Seed(context);
context.SaveChanges();
}
Dodałem komentarz do Dave'a, ale nie wiem, czy to nastąpi. Więc tu. – hidden
Pamiętaj, że jeśli nazwa bazy danych zawiera łączniki, musisz to zrobić: '[My-DatabaseName-with-hyphens]' w części 'ExecuteSqlCommand'. –
- 1. Gdzie jest modelBuilder.IncludeMetadataInDatabase w EF CTP5?
- 2. Kod EF Najpierw utwórz nieklastrowy indeks klucza podstawowego
- 3. EF 4.2, CodeFirst - Właściwość nawigacji wewnątrz typu złożonego
- 4. Generowanie pól typu pieniężnego przy użyciu kodu najpierw EF CTP5
- 5. ef 5 kolekcja codefirst enum nie generowana w bazie danych
- 6. Utwórz kursor z zakodowanej tablicy zamiast DB
- 7. Czy EF wtrąć należy zrobić ręcznie?
- 8. Jak wstawić wartości domyślne DB w EF?
- 9. Jak wywołać funkcję DB z zapytania EF LINQ?
- 10. Utwórz DB w środowisku produkcyjnym w szynach
- 11. Przechowywanie TimeSpan z Entity Framework Codefirst - SqlDbType.Time przelewowy
- 12. Utwórz pusty sqlite db z wiersza poleceń
- 13. PostgreSQL: Upuść bazę danych, ale DB nadal tam jest.
- 14. JTable - przeciągnij i upuść
- 15. Przykład "przeciągnij i upuść"?
- 16. EF CTP5 - Silnie typowane, chętne ładowanie - jak uwzględnić zagnieżdżone właściwości nawigacyjne?
- 17. EF CodeFirst THT - Kolumna "Id" określona jako część tego MSL nie istnieje w MetaDataWorkspace
- 18. EF CodeFirst: Albo @objname parametr jest niejednoznaczny lub zastrzeżony @objtype (kolumna) jest źle
- 19. Kod EF EF 4.1 Pierwszy widok dołączonego obiektu jako zmodyfikowanego
- 20. przeciągnij i upuść + zwyczaj rysowania w Androidzie
- 21. Konfiguracja programu mvc-mini-profiler dla EF-db- pierwszy
- 22. Wywołanie __enter__ i __exit__ ręcznie
- 23. Utwórz plik cookie symfony2 pamiętaj mnie ręcznie (FOSUserBundle)
- 24. Jak korzystać z migracji programowo w EntityFramework Codefirst?
- 25. Przeciągnij i upuść w MobileSafari?
- 26. Przeciągnij i upuść plik tekstowy
- 27. Przeciągnij i upuść wydarzenie javascript
- 28. Przeciągnij i upuść niestandardowy obiekt
- 29. Efekt przeciągnij i upuść Trello
- 30. Sterowanie WinForm przeciągnij i upuść
można użyć Database.SetInitializer, przeczytaj tutaj http://weblogs.asp.net/scottgu/archive/2010/08/03/using-ef-code-first-with-an komentarzach -existing-database.aspx –
Będziesz jednak regularnie otrzymywać następujący wyjątek: Nie można usunąć bazy danych "...", ponieważ jest ona obecnie używana. Wystarczy ponownie uruchomić VisualStudio i jesteś dobry. Ta funkcja CodeFirst jest wciąż dość niestabilna. – RedGlyph