Enity Framework Designer – StoreGeneratedPattern bug

Promuj

W SQLite używam autoinkrementacji wartości kluczy głównych w tabelach. Domyślnie wygenerowany model przez generatora Entity Framework nie uwzględniał tego faktu. Próba wstawienia nowego rekordu do tabeli zakończy się po prostu błędem, ponieważ Entity Framework będzie chciał wstawić jakąś wartość. W celu naprawienia tej sytuacji musiałem w designerze ustawić pole StoreGeneratedPattern na Identity:

Dzięki tej właściwość, EF zostawi wstawienie wartości kluczy głównych dla bazy danych. Wszystko byłoby pięknie gdyby nie pewien błąd. Designer EF w pliku EDMX ustawia wartość StoreGeneratedPattern tylko w sekcji CSDL, pomijając sekcję SSDL. Błąd jest znany i został zgłoszony blisko rok temu na Microsoft Connect. Do dzisiaj jednak nie pojawiła się żadna łatka do Visual Studio, która naprawiałaby ten błąd. Sekcję SSDL niestety trzeba poprawić ręcznie. W tym celu należy otworzyć plik EDMX w edytorze XML:

Po otwarciu pliku w edytorze XML należy znaleźć odpowiedni fragment w sekcji SSDL i go poprawić. Rozwiązanie to ma jedną wadę. Wszystkie wprowadzone zmiany zostaną nadpisane jeśli zaktualizujemy model poprzez designera. Ponowne wprowadzanie poprawek do sekcji SSDL może być czasochłonne i zwyczajnie frustrujące przy dużej ilości encji. Co można, więc z  tym zrobić? Możemy np. zainstalować dodatek do Visual Studio Huagati DBML/EDMX Tools. Dodatek pozwala m.in. na wybór, które części pliku EDMX mają zostać zaktualizowane. Możemy również skorzystać z opcji synchronizacji pomiędzy częścią CSDL i SSDL. Narzędzie rozwiązuje, więc omawiany problem w tym poście. Tutaj znajduję się krótkie wprowadzenie do tego dodatku. Wszystko byłoby pięknie gdyby nie jeden problem. Dodatek jest płatny. Za wersję Professional należy zapłacić 149.95 USD. Może kiedyś się skuszę. Na razie zastosowałem inne rozwiązanie.

Poprawną wersję pliku EDMX przechowuję w oddzielnym pliku jako kopię zapasową. Następnie po aktualizacji modelu używam WinMerge do porównania zawartości kopii zapasowej z aktualnym plikiem EDMX. Odnajduję interesujące mnie różnice w plikach i kopiuję dane z kopii zapasowej do nowego pliku EDMX. Rozwiązanie może nie jest super wygodne, ale na pewno jest lepsze od ponownego poprawiania pliku EDMX. Z WinMerge różnice w obu plikach widać jak na dłoni.

2 Responses to Enity Framework Designer – StoreGeneratedPattern bug

  1. Pingback: dotnetomaniak.pl

  2. Michal pisze:

    Szkoda, że nie powiedzieli o takich „cechach” EF jak opisałeś w swoim artykule np. na MTS-ie – byłoby do kompletu z wygłoszonymi wtedy pochwałami nad EF.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s