0

次のコード行を使用して、「ActivityEntity」タイプのオブジェクトのみを返すクエリを作成できます。

var q = CreateObjectSet<EntityBase>("EntityBases").OfType<ActivityEntity>()

..そしてクエリの実行は期待どおりに機能します。しかし、私は実際にエンティティSQL構文を使用してクエリを作成したいので、上記を次のコードに変換しようとしました...

string query = "SELECT it FROM OFTYPE(MyContext.EntityBases, MyNamespace.ActivityEntity) AS it";
var q = context.CreateQuery<DbDataRecord>(query.ToString(), new ObjectParameter[] { });

...これを除いて、次のエラーが発生します...

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

...両方のコードセットが同じC#ファイル内にあるため、強く型付けされたバージョンのコードは問題なく機能するため、名前空間に問題が発生することはありません。この問題を解決するためのアイデアはありますか?

ノート:

これが違いを生むかどうかはわかりませんが、Entity Frameworkはコード生成戦略がNoneで設定されており、使用する独自のクラスを作成しました。しかし、私はそれらをEdmEntityTypeAttribute属性でマークしました。

4

1 に答える 1

0

解決策は、エンティティSQLを生成する前にCreateObjectSetが使用されていることを確認する必要があることがわかりました。したがって、エンティティSQLを作成する前に、次のコードを使用します...

var q = CreateObjectSet<EntityBase>("EntityBases").OfType<ActivityEntity>();

ただし、生成された「q」を実際に使用することはありません。この行を使用するだけで、EntityFrameworkコンテキストがEntityBasesコレクションとその派生型の存在を認識できるようになります。

于 2012-10-18T21:57:56.090 に答える