1

データベースからデータを取得し、コントローラーとビューを介して視覚化する場合、ASP.NET MVCとentityframeworkの概念をエレガントで堅牢な方法でどのように組み合わせるのですか?

以下の例では、usingステートメントが閉じられた後にビューが表示されるため、Dispose例外がスローされます。

        // code in controller
        using (var usersDb = new UsersDb(new WebSecurityWrapper()))
        {
            var user = usersDb.GetUser(User.Identity.Name);
            return View(user);
        }

        // code in usersDb model -- GetUser method
        public User GetUser(string name)
        {
            var id = _webSecurity.GetUserId(name);
            var user = Users.FirstOrDefault(usr => usr.Id == id);

            return user;
        }

非常に明白ですが、私が考えることができる唯一の代替手段は、ビューが独立して表示できるようにユーザーオブジェクトを「複製」することです。それは正しくないと思います。

では、これを行う適切な方法は何ですか?

4

2 に答える 2

1

ビューでUserオブジェクトのナビゲーションプロパティを使用していると思います。これらはおそらく怠惰な方法で評価されます。

メソッドを終了する前に、Userオブジェクトが作成されます。どういうわけか、ビューで照会される追加情報を要求しています。ただし、破棄はすでに行われているため、これにより例外が発生します。

1つのオプションは、インクルードを使用して、追加の必要なデータをすぐに照会することです。

于 2013-01-01T18:01:59.997 に答える
0
    User user;
    using (var usersDb = new UsersDb(new WebSecurityWrapper()))
    {
        user = usersDb.GetUser(User.Identity.Name);
    }

    return View(user);
于 2013-01-01T16:39:42.830 に答える