私は最初にEF4を使用しています。そのため、私のモデルクラスには、パブリックプロパティ、いくつかの仮想プロパティ(他のテーブルからのレイジーロードデータ用)、および[NotMapped]
属性が付加されたいくつかのプロパティがあり、EFによってスキップされます。属性を考慮したEntity Frameworkの生のクエリを取得
ときどきロークエリを使用して、c.Database.SqlQuery<T>("select ...")
を使用してEFを行マッパーとして使用することがあります。
「Intellitrace」では、これらのクエリが「IndexOutOfRange」に対して多くのスローされ捕捉された例外を生成していることに気付きました。見た後、例外はモデルオブジェクトの仮想と[NotMapped]プロパティのすべてです。私は、テーブルのプロパティだけで新しいデータモデルクラスまたは親クラスを構築する必要はありません。いくつかの設定ステップがありますが、未処理のクエリランナーの行マッパーにEFの残りの部分と同じ注釈に注意を払うように指示していますか?多分EF5でこれを修正したでしょうか?
私はdbSetが動作していることを知っていました。さまざまな理由から、私はDatabaseSetqlQueryの使用に興味があるdbSetを持っていません。だから、答えは「決してない」のように聞こえる。 – Mikeb
はい、これらの2つの呼び出しには大きな違いがありますが、 'DbSet'を使用しない理由はありません。コンテキストがあり、型を知っているので、 'dbContext.Set().SqlQuery(....)を呼び出すことができるはずです。 –
それが速かったかどうかを見てみようとしていたのですが、なぜそれをしなかったのかを思い出しました。「エンティティタイプ(T)は現在のコンテキストのモデルの一部ではありません。 – Mikeb