2017-09-25 5 views
0

テーブルから特定のフィールドのみを選択するために、以下の未加工SQLクエリを実行しました。'System.Data.Entity.Core.EntityCommandExecutionException'がEntityFramework.SqlServer.dllで発生しましたが、ユーザーコードで処理されませんでした

{ 
List<CustEmpVM> CustomerVMlist = new List<CustEmpVM>(); 
var cid = db.Customers.SqlQuery("select SchedDate from Customer where CustID = '@id'").ToList<Customer>(); 
} 

は、しかし、私はのエラー得続ける: はSystem.Data.Entity.Core.EntityCommandExecutionExceptionEntityFramework.SqlServer.dllで発生しましたが、ユーザーコードで処理されなかった

追加情報:データリーダーは指定されたとの互換性がありませんALFHomeMovers.Customer。タイプがCustIDのメンバには、同じ名前のデータ・リーダーに対応する列がありません。

+0

、データベース内の 'CustID'列はありますか? –

+0

はい、@OJ Raquenoがあります – ninuhh

+0

私はそのエラーのInnerExceptionをチェックすると、それはnullであると言います。私はこの同じ質問で見た答えを適用しようとしましたが、うまくいかないでしょう。 – ninuhh

答えて

0

例外メッセージは非常に簡単です:Customerテーブルの完全なエンティティを返すことが期待されるクエリだけSchedDate列には、EFがCustIDを含む他の省略の列のマッピングは行われないことができ、したがって、返されました。あなただけのクエリ結果をマテリアライズし、その後Select使用し、SchedDate列を返したい場合は

// don't forget to include SqlParameter 
var cid = db.Customers.SqlQuery("SELECT * FROM Customer WHERE CustID = @id", 
           new SqlParameter("id", "[customer_id]")).ToList(); 

var cid = db.Customers.SqlQuery("SELECT * FROM Customer WHERE CustID = @id", 
           new SqlParameter("id", "[customer_id]")) 
         .AsEnumerable().Select(x => x.SchedDate).ToList(); 

NB Customersを想定し

ではなくCustomerからすべてのフィールドを返してみてください、DbSet<Customer>次のとおりです。私は上記のSELECTクエリに基づいてLINQを構築することができると思います:

var cid = (from c in db.Customers 
      where c.CustID == "[customer_id]" 
      select c.SchedDate).ToList(); 

同様の問題:

The data reader is incompatible with the specified Entity Framework

0

代わりに生のクエリのクエリ以下の使用:

{ 
List<CustEmpVM> CustomerVMlist = new List<CustEmpVM>(); 
var cid = db.Customers.Where(w=>w.Id == YOURCUSTOMERID).Select(s=>new Customer{SchedDate = s.SchedDate }).ToList(); 
} 

それは時間の誤差ではなく、実行時エラーをコンパイル与えます。

+0

まだ動作しません – ninuhh

関連する問題