33

この単純なクエリを Entity Framework で実行しています

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

しかし、私はこのエラーが発生しました:

データ リーダーには複数のフィールドがあります。複数のフィールドは、EDM プリミティブまたは列挙型では無効です。

何が問題なのですか?

4

4 に答える 4

45

病院のテーブルがどのように見えるかを確認することは有用ですが、病院のような単純なものが HospitalId と HospitalName で構成されていると仮定すると、いくつかの選択肢があります。

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

//where you define MyEntity as the same structure as the table would work
db.Database.SqlQuery<MyEntity>("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>
db.Database.SqlQuery<IEnumerable<Tuple<int, string>>>("SELECT * FROM hospital");

基本的にエラーは、コードが病院の構造を文字列に詰め込む方法を知らないことです

于 2013-04-10T17:31:28.200 に答える
0

cgotbergがくれた 2 番目の回答に基づいて、私自身の質問に回答します。そのコードの問題は、一部のテーブルのフィールドがデータベース内のフィールドと同じではないことでした(例外を探していましたが、見つかりませんでした。申し訳ありません)が、実際には存在します。何らかの理由で、テーブルのすべてのフィールドをクエリ文字列に追加する必要がありました。つまり、「病院から病院の電話、ホルピタル通りなどを選択する」と書く必要がありましたが、「病院から病院の名前を選択する」と書くと、例外が発生します。

うまく説明できたことを願っています。

于 2013-04-11T12:21:49.720 に答える