0

私はエンティティフレームワークの初心者です。

次のメソッドを書き込もうとしましたが、コンパイル時エラーが発生します。

 protected static void EntitySQLQuery(AWEntities context)
        {
            string cmd = @"SELECT VALUE c FROM AWEntities.Person AS c WHERE c.FirstName = @FirstName";

            ObjectQuery<Person> persons = new ObjectQuery<Person>(cmd, context);//Error


        }

'System.Data.Objects.ObjectQuery.ObjectQuery(string、System.Data.Objects.ObjectContext)'に最適なオーバーロードされたメソッドの一致には、いくつかの無効な引数があります

4

2 に答える 2

2

AWEntities contextオブジェクトはとして認識されませんObjectContext。オブジェクトのタイプを確認してください。ObjectContextObjectQueryのコンストラクターの定義を見てください

于 2013-01-27T01:10:58.367 に答える
1

これは、EntityFrameworkのより紛らわしい点の1つです。理解しなければならないのは、ObjectContextは、2010年頃のEntityFrameworkを実行する古い方法であるということです。これは、DbContext(およびコードが最初)の前でした。次のように、DbContextをIOjbectContextAdapterにキャストすることで、ObjectContextにアクセスできます。

((IObjectContextAdapter)context).ObjectContext;

これにより、クエリは次のようになります。

ObjectQuery<Person> persons = new ObjectQuery<Person>(cmd, ((IObjectContextAdapter)context).ObjectContext);

エンティティ構造化クエリがプロモートされているかどうかはわかりません。可能な場合はLInQの使用を検討します。

var firstname = "Fred";
return from person in AWEntities.Person
       where person.FirstName = firstname
       select person;

Julie Lermanの本を読んでいる場合は、3冊すべてを読むことを強くお勧めします。最初のものはすべての基本を説明する巨大な墓であり(そして物事を行うためのObjectContextの方法を中心に書かれています)、次の2つは今日のコードファースト/dbcontextの世界にとってより実用的です。

于 2013-02-02T14:48:38.330 に答える