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 フレームワークを使用する意味を否定しているように感じます。この時点でのアドバイスや指示をいただければ幸いです。