13

誰でも手を差し伸べることができますか?私は MVC ストアフロントのビデオを見ていて、これらの手法、つまり DDD、リポジトリ パターンを使用して独自の Web サイトを作成しましたが、Entity Framework を使用したいと考えています。

インターフェイスでは IQueryable を返しますが、Entity Framework では代わりに ObjectQuery を返す必要がありますか? - LINQ を使用します。

また、ストアドフロントの例では、次のようになります。 IQueryable<Category> GetCategories();

また、MVC ストアでは、Category クラスは構築されたエンティティ クラス (標準クラス) でしたが、Entity Framework では、これらのクラスはオブジェクト コンテキストで事前に構築されています。そうではありませんか?

それで、私はそれらを構築する必要がありますか?

私は少し混乱しています。誰かに役立つ例やコードがあれば、それは本当に役に立ちます。

私が言うように、linq2sql を使用して MVC ストアフロントのビデオを見てきましたが、実際には Entity Framework を使用したいと考えています。

何か案は?

ありがとう

鍛冶屋

4

6 に答える 6

9

一度に1つずつ質問に答えさせてください。

リポジトリは、 ObjectQueryではなくIQueryable<T>を返す必要があります。その理由は、リポジトリパターンの全体的な目的は、データストアの詳細を抽象化することであるためです。これにより、コントローラーを単体テストするときに、モックリポジトリを置き換えるなどのことができます。リポジトリにObjectQueryを返すようにすると、EntityFrameworkが抽象化されなくなります。別の言い方をすれば、リポジトリのユーザーは、O/Rマッピングを行っているのがEntityFrameworkであることを可能な限り知らないようにする必要があります。

Stack Overflowの段落テキストで大なり記号と小なり記号を使用するには、HTMLの場合と同じように、次のようにエスケープする必要があります。

&lt;

コードブロックでこれを行う必要はありません。コードブロックでは、より小さい/より大きい記号を入力するだけです。

于 2009-03-30T13:14:43.497 に答える
6

http://www.asp.net/learn/mvc/#MVC_SampleAppサイトで Contact Manager チュートリアルを参照すると、リポジトリ パターンとエンティティ フレームワークが使用されている可能性があります。

于 2009-03-30T01:14:57.877 に答える
5

私はあなたと同じように数週間前に始めました。EF を使用するのは非常に簡単であることがわかります。私のプロジェクトは小さいので、EF によって生成されたエンティティをモデル クラスとして使用しています。部分クラスを使用して独自のロジックをエンティティに追加できます。

例として、私のリポジトリの1つの簡単な方法を次に示します。

    /// <summary>
    /// Finds a user by it's credentials
    /// </summary>
    /// <param name="oUser"></param>
    /// <returns></returns>
    public User FindByCredentials(string username, Byte[] password)
    {
        User user = null;

        if (!Validators.IsStringEmptyOrNull(username))
        {
            user = this.FindByCredentialsQuery(username, password).FirstOrDefault<User>();
        }

        return (Validators.IsNull(user)) ? new User() : user;

    }


    /// <summary>
    /// Finds a user by it's credentials
    /// </summary>
    /// <param name="username"></param>
    /// <param name="password"></param>
    /// <returns></returns>
    protected IQueryable<User> FindByCredentialsQuery(string username, Byte[] password)
    {
        var query = from Users in this.UserDataContext.Users
                    where
                        (Users.Username == username) &&
                        (Users.Password == password) &&
                        (Users.Enabled == true)
                    select Users;


        return query;
    }

リポジトリ内でのみ IQueryable を使用しており、要求されたエンティティのリストのみを返すことに注意してください。このようにして、DB へのクエリが常に Repo 内で実行されるように制御できます。

于 2009-05-04T19:06:28.957 に答える
3

新しいMVCチュートリアルシリーズには、IQueryableを返さずにフィルターや並べ替えなどを指定できるパラメーターを持つメソッドを含むリポジトリの例が含まれています: http ://www.asp.net/entity-framework/tutorials/implementing-the -リポジトリと作業ユニットのパターン-asp-net-mvc-application

于 2011-05-11T16:37:23.030 に答える
3

エンティティ フレームワーク用の優れた汎用リポジトリ (アクティブ) : http://www.codeproject.com/KB/database/ImplRepositoryPatternEF.aspx

最近では、これをアプリケーション フレームワークとして使用しています (完全なリポジトリが含まれています) http://efmvc.codeplex.com/

plsはそれを叫びます;)

于 2010-12-01T07:21:44.793 に答える
2

それが正しいかどうかはわかりませんが、L2E を使用しており、生成されたオブジェクトをAutoMapperサードパーティ ツールを使用してドメイン オブジェクトに変換しています。

于 2009-05-04T18:32:30.023 に答える