2012-09-20 16 views
12

W Entity Framework 5 Model pierwsze, nie wydaje się być pewne łamanie zmiany ze względu na sposób pliki klasy są generowane (nie więcej generowania kodu, ale szablony T4)Najpierw model Entity Framework 5 - Gdzie jest IDisposable?

2 przykłady:

  • Wygenerowany plik kontekst nie implementuje IDisposable już
  • nie ma konstruktor, który trwa ConnectionString już

są tam bardziej łamanie zmiany? I jakie jest ich rozwiązanie?

Odpowiedz

33

Domyślny kod wygenerowany z modelu w Entity Framework 5 dziedziczy teraz DbContext zamiast ObjectContext.

to nadal realizuje IDisposable, ale jeśli otrzymuję błąd z linii kodu podobnego do tego:

using (var mymodel = new MyModelContext()) { ... } 

... narzekających nie wykonawczych IDisposable, to problem jest najbardziej prawdopodobne, że model jest zdefiniowany w oddzielnym zestawie, który odwołuje się do EF5 i nie dodano odwołania EF5 do projektu.

Jak już wspomniał Ladislav Mrnka w swojej odpowiedzi, jeśli chcesz przekazać ciąg połączenia do konstruktora, musisz ręcznie stworzyć swój własny konstruktor, aby to zrobić.

Jeśli chcesz przełączyć Entity Framework z powrotem do starszej stylu wygenerowany kod, który automatycznie generuje konstruktora, którego szukasz, a następnie wykonaj następujące kroki:

  1. Kliknij na powierzchnię projektanta swoje Plik EDMX i spójrz na okno właściwości. Znajdź właściwość o nazwie "Strategia generowania kodu" i ustaw ją na "Domyślna" zamiast "Brak". Dzięki temu Visual Studio zacznie tworzyć kod dla twojego modelu obiektowego w MyModel.Designer.cs w jednym dużym pliku, tym razem przy użyciu ObjectContext zamiast DbContext.
  2. Usuń następujące pliki poniżej spod pliku EDMX: MyModel.Context.tt, MyModel.tt. Są to automatycznie wygenerowane pliki, których już nie potrzebujesz. Jeśli ich nie usuniesz, otrzymasz konflikty nazw klas, ponieważ obiekty zostaną utworzone dwukrotnie.
+0

Dzięki! W przypadku, gdy inni go przegapili, projekt implementujący kod "using (...)" potrzebuje nowego EntityFramework.dll, a nie tylko projektu, który przechowuje plik .edmx. – Parmenides

+0

@Parmenides można określić, które za pomocą odniesienia potrzebuje? – Zapnologica

+0

Dziękujemy! Oprócz odwołania do EntityFramework, musiałem dodać odniesienie do System.Data.Entity, a następnie zniknął mój błąd "using". :) –

5

Wygenerowany plik kontekst nie implementuje IDisposable już

IDisposable jest nadal realizowany przez typ kontekstowego rodzicem. Wygenerowany typ jest nadal do dyspozycji.

Nie ma konstruktor, który trwa ConnectionString już

Obecnie wykorzystuje konwencję, aby uzyskać ciąg połączenia, ale możesz dodać własny konstruktor albo szablon lub do częściowego klasy części kontekście .

Czy jest więcej zmian łamania? I jakie jest ich rozwiązanie?

Jest cała zmiana łamanie ponieważ używa innego API - DbContext API zamiast ObjectContext API, co oznacza różne rodzaje, różne metody, podmioty POCO itd Jeśli chcesz wrócić do oryginalnego generowania kodu trzeba usunąć te Szablony T4 i włącz generowanie kodu zgodnie z opisem w pliku .Designer.cs, ale obecnie zalecanym sposobem jest użycie POCO i API DbContext.

1

Miałem ten sam problem z instrukcją using wymagającą typu rozszerzonego IDisposable ... Okazuje się, że zapomniałem odwołać się do System.Data.Entity w moim projekcie ... Dodano odwołanie i naprawiono problem.

Powiązane problemy