2009-08-05 11 views
5

私はモデルのDocsにguid列author_idを持っています。これはMembershipUserを参照する必要があります。ASP.NET MVC:モデルとMembershipUsersの関係

私は標準MembershipProviderを使用しています(私はdb名のみ変更しました)。もちろん、MembershipUsersのモデルはありません。

DocsクラスのメンバーシップユーザーとMembershipUserのすべてのドキュメントを取得するには、いくつかのメソッドを簡単に定義できますが、いくつかのことは難しいです(ユーザーのリスト、各ユーザーのドキュメント数を表示します)。さらに、私はMVCを奇妙な方法で使用していると感じています。メンバーシップモデルを使用すると簡単になります。

この関係はどのように実装できますか? MembershipUsersのモデルを実装する必要がありますか?

おかげ

更新:私は全く明確ではありませんでした実現。

私のすべてのユーザーとそのドキュメントをリストしたいとします。これを行うための 一つの方法は次のとおりです。

ViewModel model = new ViewModel() 
{ 
    Users = from MembershipUser user in Membership.GetAllUsers(page, pagesize, out totalusers) 
      select new UserWithDocs 
      { 
       User = user, 
       Docs = context.Docs.Where(c => c.author_id == (Guid) user.ProviderUserKey) 
      }, 
    UsersCount = totalusers 
}; 

これは動作しますが、ユーザーごとに1つの別々のクエリを生成します。

ユーザーのGUIDの配列を取得してから、文書where author_id IN list_of_guidsをクエリできますが、手動で各文書を作成者に関連付ける必要があります。

もっと良い解決策はありますか?

+0

あなたはすべてのユーザーとすべての文書をロードしようとしていますか?これは多くのデータのように聞こえる。ビューをユーザーのリストに分けて、選択したユーザーのドキュメントのリストにドリルダウンしてみましょう。あなたが指摘したように、2つのクエリでこれを行うには、foreachループを使用してドキュメントを手動でユーザーに関連付ける必要があります。 – Junto

答えて

0

私はあなたを正しく理解しているかわかりませんが、ユーザーのモデルとしてMembershipUserクラスを使用できます。あなたの "doc"モデルを参照する場合は、モデルクラスに "Author"というプロパティを追加するだけで、DBからモデルをフェッチするときにも同様にユーザーを取得できます。

メンバーシップクラスは、すべてのユーザーを一覧表示するには、いくつかの静的メソッドが含まれ、追加/削除ユーザーなど

関連する問題