2014-07-10 14 views

Odpowiedz

18

Technicznie jest to możliwe, ale nie polecam go. Znacznie lepiej jest po prostu użyć kodu pierwszego na całej tablicy. Tak, jak na ironię, możesz użyć "code-first" z istniejącą bazą danych.

Po prostu utwórz POCO, które pasują do tabel w istniejącej bazie danych. Jeśli POCO nie nazywa się tak samo jak stolika (nie wszystkie nazwy tabel byłoby ważne lub odpowiednie nazwy klas), można użyć atrybutu Table wyraźnie powiedzieć EF co tabela Twój POCO współpracuje z:

[Table("SomeTable")] 
public class MyAwesomeEntity 
{ 
    ... 
} 

Następnie będziesz potrzebować oddzielnego kontekstu specjalnie dla tej istniejącej bazy danych i wszelkich podmiotów, które do niej należą. Wszystko, co musisz zrobić, to 1) powiedzieć, jaki łańcuch połączenia powinien użyć i 2) wyłączyć inicjalizację bazy danych, więc EF nie próbuje utworzyć bazy danych.

public MyExistingDatabaseContext : DbContext 
{ 
    public MyExistingDatabaseContext() 
     : base("MyExistingDatabaseConnectionStringName") 
    { 
     Database.SetInitializer<MyExistingDatabaseContext>(null); 
    } 

    // DbSets here 
} 

I to wszystko. Ilekroć potrzebujesz pracy z jednostką z istniejącej bazy danych, po prostu dodaj ją do nowego kontekstu lub zdobądź w inny sposób, na przykład przez kontener DI (wstrzyknięcie zależności) i udaj się do miasta.

+0

Dziękujemy! To ma sens. – drewwyatt

+7

Warto również wspomnieć, że jeśli zainstalujesz rozszerzenie EF Power Tools w Visual Studio, będzie ono w stanie generować prawdziwe POCO (zamiast edmx nonsens) z twoich istniejących baz danych. http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d –

+0

@ChrisPratt wspomniałeś, że pierwszy kod i baza danych-pierwszy jest "technicznie możliwy" czy możesz wyjaśnić, jak to osiągnąć? http://stackoverflow.com/questions/40512961/combine-code-first-database-first-in-single-model – randomsolutions

Powiązane problemy