1

本からEntity Framework 4を学んでいます。

そして、次のように Entity SQL を使用してクエリを作成しようとしています。

using (var context = new BAEntities())
{                
    string str = "SELECT VALUE c " +
                 "FROM BAEntities.Contacts " +
                 "AS c " +
                 "WHERE c IS NOT OF(BAModel.Customer)";

    ObjectQuery<Contact> qry = context.CreateQuery<Contact>(str);

    Console.WriteLine(qry.Count());
}

私のクエリの目的は、顧客タイプではなく、連絡先タイプのすべてのオブジェクトを取得することです。ここで、Customer は Contact から継承します

しかし、次のエラーが発生しました:

タイプ 'BAModel.Customer' が見つかりませんでした。必要なスキーマがロードされ、名前空間が正しくインポートされていることを確認してください。タイプ名の近く、1 行目、64 列目。

しかし、次のような LINQ to Entities でクエリを実行すると、次のようになります。

ObjectQuery<Contact> qry = context.Contacts.Where(c => !(c is Customer));

その後、プログラムは正しく実行できます。

BAModel.Customerでは、モデルが配置されている同じプロジェクト内でコードを実行したのに、Entity SQL が見つからないのはなぜですか。

これで私を助けてください。

前もって感謝します。

4

3 に答える 3

0

間違った名前空間を使用していることがわかりました。正しいフルネームはBAGA.Customerであり、BAModel.Customerではありません。正しい名前空間は、モデルの名前空間ではなく、モデルから生成されたクラスの名前空間(Model1.Designer.cs内のクラスの名前空間)です。

于 2011-06-09T04:31:56.623 に答える
0

これを試して:

_ObjectContext.MetadataWorkspace.LoadFromAssembly(Assembly.GetAssembly(typeof(BAModel.Customer)));

CreateQuery コマンドを実行する前。お役に立てれば。

于 2011-10-24T02:21:40.657 に答える