2013-04-10 8 views
21

mam wykonaniu tej prostej kwerendy z Entity Framework„Czytnik danych ma więcej niż jedno pole” błąd w Entity Framework

db.Database.SqlQuery<string>("SELECT * FROM hospital"); 

Ale mam ten błąd:

The data reader has more than one field. Multiple fields are not valid for EDM primitive or enumeration types.

co może być problem?

+0

spróbować tej db.ExecuteStoreCommand („SELECT * FROM szpitalu”); – KF2

+0

Mówi, że nie zawiera definicji ExecuteStoreCommand ... Czy brakuje Ci dyrektywy lub odniesienia assambly? –

+0

: czy używasz .net 4? – KF2

Odpowiedz

31

Przydałoby się zobaczyć, jak wygląda stolik w szpitalu, ale zakładając, że coś prostego jak szpital składa się z HospitalId i HospitalName, masz kilka możliwości.

db.Database.SqlQuery<IEnumerable<string>>("SELECT hospitalName FROM hospital"); //would work if all you're trying to do is get the Name 

db.Database.SqlQuery<MyEntity>("SELECT * FROM hospital"); //where you define MyEntity as the same structure as the table would work 

db.Database.SqlQuery<IEnumerable<Tuple<int, string>>>("SELECT * FROM hospital"); // would theoretically work although I haven't tried it. Where the Tuple items would have to match the database types in order. I.e. if field 1 is an int and field 2 is a string then Tuple<int,string> 

Zasadniczo błąd jest kod nie wiem jak rzeczy strukturę szpitala na sznurku

+0

Nie wszystkie wartości w wartościach holpitalnych są ciągami –

+3

te pierwsze dają error: "Czytnik danych ma więcej niż jedno pole, wiele pól jest niepoprawnych dla typów pierwotnych lub wyliczeniowych EDM". Segun jeden mówi, że identyfikator nie jest taki sam jak w bazie danych, ale jest taki sam. a ostatni mówi: "Typ wyniku" System.Collections.IEnumerable "może nie być abstrakcyjny i musi zawierać domyślny konstruktor." –

+0

Cały problem polega na tym, że funkcja SqlQuery potrzebuje kontenera do wyciśnięcia wyniku w So SqlQuery , co oznacza, że ​​możesz pobrać maksymalnie jeden typ łańcucha. Powinieneś więc prawdopodobnie użyć drugiego przykładu cgotbergsa! – CSharpie

-1

Na podstawie odpowiedzi secound że cgotberg dał mi, Im zamiar odpowiedzieć na moje własne pytanie . Problem z tym kodem polegał na tym, że niektóre pola tabeli nie były takie same jak w bazie danych (szukałem wyjątku, ale nie mogłem go znaleźć, przepraszam za to), ale tak naprawdę istnieje. Z jakiegoś powodu musiałem dodać wszystkie pola tabel do ciągu zapytania. Chodzi mi o to, że musiałem napisać "SELECT hospital_phone, holpital_street, itp., Itp. ze szpitala", jeśli piszę "SELECT nazwa_ szpitala ze szpitala" wystąpił wyjątek.

Mam nadzieję, że wyjaśniłem to dobrze.

4

to rozwiązać mój problem, niektóre wyniki, gdzie nie sposób coraz to miało

string storedProcedure = "Admin_AutoGenerateKeywordsFortblCompany @Company_ID=" + CompId; 

var s= db.ExecuteStoreQuery<List<string>>("exec " + storedProcedure).ToList(); 

wyników pojedynczych lub wielokrotnych tu można złowić

+0

Dla odpowiedzi w 2016 roku idziesz do szkoły z ObjectContext, to dobrze, ale chciałbym wyjaśnić to w twoim kodzie dla ludzi. –

Powiązane problemy