2009-09-29 10 views
10

Używając VS 2008, SQL Server 2008 i WPF 3.5, wprowadziłem pewne zmiany do mojego schematu i zaktualizowałem model. Kompiluje i działa dobrze, dopóki aplikacja klient wymaga określonego podmiotu i otrzymuję następujące (rzeczywiste nazwy zastąpiony):Czytnik danych jest niekompatybilny ... członek nie ma odpowiedniej kolumny w czytniku danych

The data reader is incompatible with the specified '<Model>.<ViewBasedEntity>'. A member of the type, '<Property>', does not have a corresponding column in the data reader with the same name. 

Rozglądałem się za pośrednictwem aplikacji dla usług związanych z nazwami jednostki i własności, próbował zmiana nazwy właściwości na mapie tabeli, Wydaje się być liczbą innych tam zgłaszających ten sam błąd, ale nie wydaje się, aby znaleźć na czas odpowiedź ....

... Czy ktoś wie, jak to śledzić, a jeśli tak, to czy istnieje pewna poprawka lub metodologia do uniknięcia w przyszłości?

+0

Moim problemem było to, że miałem RETURN (0) przed moim SELECT .... oświadczeniu. Oczywistym było, że nie zwrócił kolumn, których oczekiwał EF. –

Odpowiedz

2

Proszę sprawdzić this wpis na blogu. Sprawdź pierwszy komentarz od Divan Moller. Może ci pomóc.

+0

Dzięki Mahin - w tym przypadku nazwy są identyczne w przypadku i wszystkiego. Po kolejnym komentarzu do tego linku ktoś może zajrzeć do wspomnianego wyżej rozdziału 13 Biblii Entity Framework - nie mam kopii. – erinql

4

Ok - tutaj jest chudy:

Ten szczególny widok był ustawiony jako typ zwracany przez procedurę przechowywaną, który musiał być ustawiony jako Importuj Funkcja w Entity Container modelu.

Zaktualizowałem ten widok, aby pasował do nowych wymagań raportowania, nie zdając sobie sprawy, że ma to znaczenie dla importu funkcji. Dodatkowe pola nie są częścią zestawu danych uznanych w tym celu, więc nie można znaleźć dopasowania dla żadnego z nich.

Powieliłem więc widok i opatrzyłem go "Raportem", a następnie przywróciłem oryginał do oczekiwanego zestawu pól zwrotu.

Voila!

+0

Miałem podobny problem, a widząc wzmiankę o "Przechowywanej procedurze" przypomniałem mi, co było przyczyną. –

12

Zamiast aktualizację widoku, można również zaktualizować Importuj Funkcja:

  • przejść do okna modelu Browser
  • Rozwiń EntityContainer
  • Otwórz Importuj Funkcja w oknie Szczegóły odwzorowania
  • Jeśli nazwa jednostki (lewa kolumna) nie jest zgodna z oczekiwaną nazwą pola (prawą kolumną), można zmienić kolumnę po prawej stronie, aby dopasować to, do którego faktycznie zostało wywołane zwrócone pole.
+0

wielkie dzięki, pomogło mi to. –

5

Miałem podobny problem, który wygenerował ten sam komunikat o błędzie - problem polegał na tym, że nazwa kolumny zwrócona przez proces zawierała spację.

Podczas tworzenia złożonego typu, [my column] został utworzony jako my_column.

Następnie podczas wykonywania procesu z ExecuteStoreQuery, my_column nie istniał w czytniku danych, ponieważ proces nadal zwrócił [my column].

Rozwiązanie: usuń spację z nazwy kolumny proc i ponownie utwórz swój typ złożony dla zaimportowanej funkcji.

1

Natknąłem się na ten sam problem, gdy ostatnio używano Sprocs.Miałem pewne conditonal SQL w sproc wzdłuż linii paru „if” sprawozdanie

IF @param1 = 'knownValue' 
BEGIN 
SELECT * FROM EntityType WHERE ID = 'somevalue' 
END 
ELSE IF @param1 = 'knownValue2' 
BEGIN 
SELECT * FROM EntityType WHERE ID = 'somevalue' 
END 

oto mój kod EF:

return context.Database.SqlQuery<EntityType>(
      "[NAV].[GeEntityType] @Date, @ID", 
      new SqlParameter("Date", paramDate), 
      new SqlParameter("ID", paramId)).ToList(); 

nie miałem coś dla scenariuszy gdzie ani „if” sprawozdania Zwrócił true, więc sproc nie zwrócił nawet pustego zestawu wyników i spowodował, że EF wyrzucił ten błąd. Nie zwracając nawet pustego czytnika, EF nie miał nic wspólnego z mapowaniem kolumn na właściwości.

Mam nadzieję, że to pomaga.

+0

Odpowiedź santosa zadziałała: "Sproc nie zwrócił nawet pustego zestawu wyników" – beaudetious

+0

Tak naprawdę Nawet ja stanąłem w obliczu tego samego problemu. Rozważyłem wszystkie przypadki, ale zignorowałem ostatni przypadek, który rzucił tę kwestię. Po przeczytaniu tego posta włączyłem ostatni przypadek i problem został rozwiązany. –

2

Widziałem, jak to się dzieje w obiektach danych, które zmieniają zestaw wyników (na przykład sproc z instrukcją if). Komunikat o błędzie to praca z ramką Entity/Data reader z informacją, że oczekuje ona kolumny x, która nie została zwrócona.

Aby obejść ten można albo a) Upewnij się, że wszystkie ścieżki swojej sproc zwraca te same nazwy kolumn b) stosowanie Database.ExecuteSqlCommand

0

Prosty sposób:

  1. Po zakończeniu SP zaktualizuj model EF, aby był dostępny.
  2. Dodaj instrukcję PRINT do SP, przeprowadź kompilację i uruchom.
  3. Skomentuj dynamiczny SQL i wstaw instrukcję PRINT, przekompiluj ją, aby działała.
  4. Teraz wykonaj Import funkcji w EF, kolumny pokaże.
  5. Zmiana SP z powrotem do kodu dynamicznego i wszystko dobrze :)
Powiązane problemy