1

私は学習しながら学んでいるので、EFとMVC3の背後にあるすべての概念に精通しているわけではありません。EFモデル===MVC3モデルのアプリがありますが、いくつかの集約ViewModelもあります。私はコントローラーのように呼び出しPerson dude = Person.Get(id);ます。ここで、Personはデータベースから生成されたEFモデルであり、次のようなカスタムメソッドで拡張します。dude.GetSiblings();

私が今やりたいことは(これが悪い考えだと言わない場合)、EFコードを別のアセンブリに移動し、ビューにフィードできる新しい単純な非エンティティモデルを使用してさらに別のアセンブリを作成することです。どういうわけか(可能であれば)JSONとしてシリアル化して移動します。

問題は、方法がわからないことです。EFモデルを別のプロジェクト(別のDALなど)に移動した場合、Efモデルにマップする2番目のモデルをどのように作成しますか?int id {get;set;} string name {get;set}EFモデルとMVC3モデルの両方のようなコードがあれば、それは多くの繰り返しを引き起こしませんか?私のViewModelsでは、エンティティを直接使用しますclass ViewModelX { Person person; List<Post> posts; int something; }が、それはモデルではなく、パッケージ化されたエンティティのセットですよね。

GetSiblingsのようなメソッドはどうですか?var list = dude.GetSiblings()コントローラーとpublic List<Person> GetSiblings() { return this.EFPerson.GetSiblings(); }MVC3モデルで?何がどこに行くのか、私は非常に混乱しています。グーグルで調べてみると、実際には高度で非常に初心者のチュートリアルしか見つかりませんでした。あるいは、何を探すべきかわからないので、助けを求めてください。

4

1 に答える 1

1

EFモデルを別のプロジェクト(別のDALなど)に移動した場合、Efモデルにマップする2番目のモデルをどのように作成しますか?

ビューモデルは、ASP.NETMVCアプリケーション内にあります。

EFモデルとMVC3モデルの両方にintid{get;set;}文字列名{get;set}のようなコードがある場合、それは多くの繰り返しを引き起こしませんか?

はい、それが原因になります。これが、ビューモデルの目的です。ビューが処理する必要のあるデータを含めるため。このデータがどこから来たのかは実際には重要ではありません。AutoMapperなどのツールを使用して、ドメインモデルとビューモデル間のマッピングを自動化できます。

GetSiblingsのようなメソッドはどうですか?var list =コントローラーのdude.GetSiblings()およびpublic List GetSiblings(){return this.EFPerson.GetSiblings(); } MVC3モデルでは?

一般的なコントローラーアクションは次のようになります。

public ActionResult SomeAction(int id)
{
    // fetch an instance of the domain model:
    var domainModel = DomainLayer.GetSiblings(id);

    // map the domain model to a view model (using AutoMapper):
    var viewModel = Mapper.Map<DomainModel, ViewModel>(domainModel);

    // pass the view model back to the view
    return View(viewModel);
}
于 2012-07-02T07:15:03.263 に答える