2010-12-19 9 views
6

Z CTP4 użyłem, aby móc wykonać następujące czynności (jak suggested by ptrandem):Gdzie jest modelBuilder.IncludeMetadataInDatabase w EF CTP5?

modelBuilder.IncludeMetadataInDatabase = false 

Z tej linii kodu, EF nie tworzy tabelę EdmMetadata w mojej bazy danych, a nie śledzić modelu zmiany.

nie udało mi się znaleźć drogę do osiągnięcia tego celu w nowym CTP5, więc teraz za każdym razem, gdy zmienia mojego modelu, mam to:

Model cofając się „MyContext” kontekstu zmieniło się od Baza danych została utworzona. Ręcznie ręcznie usuń/zaktualizuj bazę danych lub zadzwoń pod Database.SetInitializer z instancją IDatabaseInitializer . W przypadku przykładu strategia DropCreateDatabaseIfModelChanges automatycznie usunie i ponownie utworzy bazę danych, a opcjonalnie zapełni ją nowymi danymi.

Czy każdy wie, gdzie znajduje się właściwość IncludeMetadataInDatabase w CTP5? Dzięki.

Odpowiedz

11

CTP5 zawiera bardzo fajne funkcja o nazwie Konwencje wtykowe, które mogą być używane do dodawania/usuwania konwencji. IncludeMetadataInDatabase zostało usunięte i zastąpione z
wymiennym konwencji, że robi to samo dla Ciebie:

modelBuilder.Conventions 
      .Remove<System.Data.Entity.Database.IncludeMetadataConvention>(); 
+0

Dzięki, Morteza. Czy wiesz, jeśli są jakieś inne różnice między tym, a po prostu upuszczenie tabeli EdmMetadata jako stan zespołu ADO.NET na blogu? Co jest lepsze? –

+2

Bez problemu. Myślę, że ten, który znalazłeś na blogu zespołu, mówi o istniejących bazach danych i ten, który zasugerowałem, kiedy generujesz DB z twojego modelu obiektowego.Pod koniec dnia oba mają taki sam wynik: masz model obiektowy POCO, który działa z bazą danych bez tabeli metadanych, więc myślę, że to zależy od twojego scenariusza (zupełnie nowej bazy danych lub już istniejącej). –

+0

Doskonały. Wielkie dzięki! –

1

Szukałem tego wszystkiego i musiałem znaleźć odpowiedź zaraz po zamieszczeniu mojego pytania, DUH. Już od ADO.NET team blog:

W CTP5 usunęliśmy potrzebę przeprowadzenia dodatkowej konfiguracji po mapowania do istniejącej bazy danych. Jeśli kod First wykryje, że wskazuje na istniejący schemat bazy danych, który nie został utworzony przez , wówczas "zaufa on użytkownikowi " i spróbuje najpierw użyć kodu ze schematem. Najprostszym sposobem punktu pierwszego kodeksu do istniejącego bazie jest dodanie App/Web.config połączenia ciąg o tej samej nazwie jako pochodzącego DbContext (...)

3

Równowartość w CTP5 wyłączyć logikę initializer: W Application_Start w Global.asax, wprowadź następujące informacje:

System.Data.Entity.Database.DbDatabase.SetInitializer<MyDBContext>(null); 
3

W EF 4.1

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Conventions.Remove<IncludeMetadataConvention>(); 
}