1

mvcパターンでアクセスまたはデータを操作するためのエンティティフレームワークコマンドまたはデータセット(ado.net)を宣言することは、私が知っているようにモデルにある必要があります。データベース内のオブジェクトのリストを取得したい場合、すべてのメソッドはモデルにあり、リストを返す必要がありますそれを取得してビューに渡す必要があります。

しかし、多くのコードで見られるように、コントローラーの decalaring メソッドが使用されています^のように

 //I get logged in user properties
        var user = db.UserProperties.SingleOrDefault(x => x.UserName == User.Identity.Name);            
        Buddyship allBudees = db1.Buddyships.SingleOrDefault(u =>u.BuddiedByUserId == user.UserId);
        var buds = from u in db.UserProperties
                   join m in db1.Buddyships on u.UserId equals m.BuddiedByUserId
                   where m.BuddiedByUserId == user.UserId
                   select new { u.FirstName, u.LastName, u.SchoolName, u.UserId };

        var buddyviewmodel = new BuddyViewModel(buds //don't know what to put here);

        return View(buddyviewmodel);

コードのこの部分はモデルまたはコントローラーにある必要がありますか?

4

3 に答える 3

3

理想的には、このコードはビジネス層に属します。私は通常、(EF を使用する) データ層とコントローラーの間にサービス層を作成します。サービス (UserServiceたとえば) は、ドメイン モデルをコントローラーに返します。次に、コントローラーはこれを ViewModel にマップし、ビューを返します。このようにして、コントローラーから離れたデータ アクセスを抽象化するため、(同じ) LINQ クエリがいたるところにあることはありません。

あなたの場合、コントローラーは次のようになります。

Buddyship buddies = _buddyService.GetBuddiesByUserId(user.UserId);
BuddyViewModel buddyViewModel = new BuddyViewModel(buddies);
return View(buddyViewModel);

非常に小規模なプロジェクトの場合、このコードはコントローラーでは問題ありませんが、ドメイン モデル クラスでは問題ありません。

于 2013-10-01T15:17:05.187 に答える