1

EF とモデル ファースト アプローチを使用して MVC プロジェクトを作成しようとしています。

Web とデータ部分が疎結合になるように実装するために、私はリポジトリ パターンを実装しようとしていますが、多くの記事を読んだ後でも、リポジトリ インターフェイスがどのオブジェクトを返す必要があるか、またはそれらがどのように返されるかを理解しようとしています。私のMVCプロジェクトの「M」モデルにバインド/マップする必要があります。

これは、私が求めていることの非常に単純な例です。

//Repository Interface
public interface IMemberRepository
{
    Member GetById(int id);
    IEnumerable<Member> FindByName(string name);
}

//Repository Interface Implementation
public class MemberRepository : IMemberRepository
{
    //My DB Context object created by EF
    private MyContainer context;

    public MemberRepository(MyContainer context)
    {
        this.context = context;
    }

    public Member GetById(int id)
    {
        return context.Members.SingleOrDefault(x => x.Id == id);
    }

    public IEnumerable<Member>  FindByName(string name)
    {
        return context.Members.Find(x => x.name == name);
    }

}

Ninject を DI フレームワークとして使用すると、次のようにコントローラーからこれを呼び出すことができます。

public class GroupsController : Controller
{
    public ViewResult Find(string name)
    {
        IMemberRepository repo = 
          ObjectFactory.Instance.CreateInstance<IMemberRepository>();
        return repo.FindByName(name);
    }
 }

この時点で、(EF モデルの) Member オブジェクトが「MVC」メンバー モデル オブジェクトにどのようにバインド/マップされるのか理解できていません。ある種のマッピングレイヤーが欠けているか、完全に軌道から外れているようです。EF で生成されたクラスを直接参照するとしたら、インターフェイスと DI フレームワークを使用する意味を否定しているように感じます。この時点でのアドバイスや指示をいただければ幸いです。

4

1 に答える 1

2

あなたのIMemberRepositoryインターフェースとその実装MemberRepositoryは私には正しく見えます。それが私のデータベースコードの構造でもあります。

MVCの世界に移り、データモデルから入力するビューモデルを作成します。これにより、ビューに必要な属性や追加のプロパティを柔軟に追加できます。

これがワークフローになります。

  1. リポジトリからオブジェクトをフェッチします
  2. ビューモデルオブジェクトにリポジトリオブジェクトのすべてのデータを入力します
  3. コントローラからビューモデルをビューに戻します
于 2013-02-19T17:00:11.090 に答える