Jak zmusić Entity Framework Core RC2 do migracji?

Jakiś czas temu rozpocząłem implementację projektu, którego celem jest zapoznanie mnie z tematyką CQRS/ES (kod ten znajdzie się także wkrótce w serii postów poświęconych właśnie temu zagadnieniu). Jednocześnie uznałem, że to dobry moment na poznanie drugiej wersji Release Candidate nowego ASP.NET. W pewnym momencie przyszedł moment, w którym chciałem dodać do projektu połączenie z bazą danych. Nie myśląc długo udałem się do projektu odpowiedzialnego za dostęp do danych, po czym w pliku project.json dodałem zależność do Entity Framework Core RC2. Po stworzeniu tabel (code-first) i obiektu kontekstowego przystąpiłem do stworzenia mojej bazy w SQL Server. W tym celu wystarczy stworzyć pierwszą migrację, którą następnie należy „zaaplikować”  znanym poleceniem update database. Jeżeli ktoś nie miał okazji musnąć jeszcze nowej wersji EF to warto w tym miejscu wspomnieć o tym, że od teraz mamy możliwość wykonywania wszelakich poleceń z linii komend, a nie poprzez Package Manager Console. W wersji RC 1 Entity Framework, migrację można było dodać w następujący sposób:

 

dnx ef migrations add nazwa_migracji

 

W wersji RC2 EF jak i ASP.NET Core wszystkie operacje odbywają się poprzez polecenie dotnet. Nie myśląc więc za długo w konsoli wpisałem:

 

dotnet ef migrations add init

 

Moim oczom ukazał się następujący komunikat:

 

sample1

 

Nie wygląda to zachęcająco. Rozpoczęła się procedura rozpoznawcza w Google. Okazało się, że komendy EF są dostępne dopiero po zainstalowaniu odpowiedniej paczki. W tym celu należy w pliku project.json dodać następujące zależności:

 

"dependencies": {
    //inne zależności
    "Microsoft.EntityFrameworkCore": "1.0.0-rc2-final",
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0-rc2-final",
    "Microsoft.EntityFrameworkCore.Tools": {
      "type": "build",
      "version": "1.0.0-preview1-final"
    }
 
  },
 
  "tools": {
    "Microsoft.EntityFrameworkCore.Tools": {
      "imports": [ "portable-net451+win8" ],
      "version": "1.0.0-preview1-final"
    }
  }

 

Po szybkiej interwencji przeszedł czas na zrobienie pożądanej migracji. Ponownie uruchomiłem polecenie po czym przeczytałem:

 

This preview of  Entity Framework tools does not support targeting class library projects in ASP.NET Core and .NET Core applications.

 

No cóż… Po kwadransie poszukiwań znalazłem odpowiedź na stackoverflow, która brzmiała:

 

Convert your class library project into an “app” project.

 

Dziękuje kapitanie oczywistość! Odnalazłem jednak oficjalną dokumentację (link tu), która szerzej opisuje jak ów czynność wykonać. W tym celu należy w pliku project.json dodać framework netcoreapp1.0, oraz opcję budowania projektu. Wygląda to tak:

 

{
    "buildOptions": {
        "emitEntryPoint": true
    },
    "frameworks": {
        "netcoreapp1.0": {
            "imports": ["portable-net451+win8"],
            "dependencies": {
                "Microsoft.NETCore.App": {
                    "type": "platform",
                    "version": "1.0.0-*"
                }
            }
        }
    }
}


 

Przyszedł czas na ostatnią próbę. Po ponownym uruchomieniu polecenia w linii komend, migracja została utworzona:

 

sample2

 

Dzisiejsza tematyka nie była może zbyt porywająca, ale wierzę że może komuś się przydać 🙂 Jak zwykle zachęcam Was do śledzenia mnie na twitterze oraz facebooku gdzie publikuję najświeższe posty i newsy ze świata IT.

Jeszcze małe ogłoszenie! Być może część z Was wie, że startuję w konkursie Daj się poznać. Do końca przyszłego tygodnia macie możliwość oddania swoich głosów, które wyłonią laureatów konkursu. Zachęcam Was do zapoznania się z blogami finałowej szesnastki i zagłosowania ! Link macie tu 🙂

Cześć !

You may also like...