2

EntityFramework を使用して、ASP.NET MVC でサイトをすばやく作成するのが好きです。私は通常、「データベース ファースト」の原則と DbContext を使用します。

DbContext と対話し、エントリを返し、変更し、削除し、追加するグローバル レイヤーを作成します。このようなもの:

GetLastPosts (int count)
FindPostById (int id)
RemovePost (int id)
...

オールインワンクラス。通常、非常に大きくなり、私はそれが好きではありません。EntityFrameworkの使用感を教えてください。

4

3 に答える 3

3

私は通常、作業単位パターンでリポジトリ パターンを使用します。

これが私が見つけた最高のチュートリアルです。asp.net で両方のパターンを作成する方法を示していますが、どのアプリでも実装は同じです。asp.net である必要はありません

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net- mvc-アプリケーション

そして、より一般的な例:

http://msdn.microsoft.com/en-us/library/ff649690.aspx

于 2012-07-05T13:09:22.673 に答える
1

私が気に入っているパターンの 1 つ (認識されているパターンかどうかはわかりません) は、DBContext に拡張メソッドを作成して、クエリを含むクラスをロードできるようにすることです。これは、クエリをある程度区分化できることを意味します。

public static XTypeQueries XTypeQueries(this EntityModel db)
{
    return new XTypeQueries(db);
}

そして別ファイルで

public class XTypeQueries : QueryLibrary
{
    public XTypeQueries (EntityModel db) : base(db) { }

    public IQueryable<Object> DoSomeQuery()
    {
        return from ... in this.db...
               select ...;
    }
}

拡張元のクエリライブラリオブジェクトは単純です

public abstract class QueryLibrary
{
    protected readonly EntityModel db;

    protected QueryLibrary(EntityModel db)
    {
        this.db = db;
    }
}

これの結果は、あなたができることです

var query = new EntityModel().XTypeQueries.DoSomeQuery();

メソッドを Queryable として保持するようにしています。これにより、メソッドが呼び出されたときに、多くの無駄な処理をせずに必要なだけ具体的にすることができます。これで、グループ化されたクエリのライブラリができましたが、Linq をインラインで記述したのと同じように動作します。

于 2012-07-05T06:51:38.210 に答える
0

アップデート

別のデータベース レイヤーを作成する必要があると思います。単一のクラスではなく、多くのドメイン クラスが必要になります。これは、リポジトリ パターンと同様に、データベース エンティティに対して作成、更新、削除などの操作を行います。

たとえば、あなたに関連する操作を行うには、クラスclientが必要になります。ClientRepository

var clientRepo = new ClientRepository();
clientRepo.AddClient(Client clientEntity);
List<Client> clientDM = clientRepo.GetClients(23);
于 2012-07-05T06:52:46.977 に答える