0

EF 4.0 に関していくつか質問がありますが、誰かが助けてくれることを願っています。

最初に少し背景を説明します。私は、visualstudiogallery.com のツールを使用して、データベースをクラスにリバース エンジニアリングしました。クラス、オブジェクト マッピングなどに関しては、すべて問題ないようです。私の dbcontext クラスでは、問題のない各テーブルのプロパティが生成されました。現在、コードのこの部分は 1 つのプロジェクトに保持され、MVC 4 アプリケーションによって呼び出されています。最終的にはこれを完全なサービス レイヤーに変換して、関心の分離に対処しますが、今のところは直接リンクでうまくいきます。

とにかく、EF の質問に戻ります。

  1. テーブル名と一致する dbcontext クラスのプロパティにアクセスするときに EF がここで何をするかについて混乱していますか? 実際には毎回すべての行を返しますか? もしそうなら気が狂いそうだ

  2. パラメーターを提供し、パラメーターに一致する行のみを返したい dbcontext クラスのプロパティではなく関数を作成しようとしましたが、クラスを追加してその中で「LINQ」呼び出しを行おうとすると、次のエラーが発生します:

ソース タイプ 'System.Data.Entity.DbSet ....'Select' のクエリ パターンの実装が見つかりませんでした。「System.Core.dll」または「System.Linq」の using ディレクティブへの参照がありませんか?

なぜこれが起こっているのですか?

  1. これはリンクに関する質問だと思いますが、users テーブル (userid)、horse テーブル (horseid)、そして馬がユーザーに関連付けられている 1 つのテーブル (horseid、userid) があると仮定します。

GetMyHorses と呼ばれる 2 が解決されたと仮定して関数を作成し、userId をパラメーターとして渡す場合、Linq を使用して、ストアド プロシージャの単純な結合クエリを介して通常取得するものを提供し、関連付けられているすべての馬を返すにはどうすればよいですか?パラメータを介して提供されたユーザー。

ありがとう。

4

1 に答える 1

1

どちらの質問も、LINQ パイプライン、IQueryableインターフェイス、遅延実行に関連しています。これらの上記のトピックを学習する必要があります。

しかし、あなたの質問に答えるには:

  1. Horsesいいえ、あなたが言うとき、Entity Frameworkは(たとえば)すべてをロードしません

    var ctx = YourHorsesContext();

        // At this time, it simply builds a query that it will fire later.
        var horses = ctx.Horses;
    
        foreach(Horse horse in horses) // it fires a SQL query here
            Console.WriteLine(horse);  // if you don't foreach, it will never fire a SQL query
    
  2. 次のように入力します。

    System.Linq を使用します。

クラスファイルの先頭にあります。コードが機能するはずです。

于 2012-12-05T11:05:14.450 に答える