2009-07-28 20 views
1

私は、4テーブルのモデルコンシデントに対してlinqからsqlへのクエリを実行するコントローラを持っています。ASP.Net MVC複数のモデルで強く型付けされたビュー

var files = from f in filesContext.Files 
        join u in filesContext.aspnet_Users on f.Uploader equals u.UserId 
        join uir in filesContext.aspnet_UsersInRoles on u.UserId equals uir.UserId 
        join ur in filesContext.aspnet_Roles on uir.RoleId equals ur.RoleId 
        select f; 

次に、ビュー渡しファイル変数をモデルとして返します。私は現在持っているビューで

:私はファイルなどを除き、他のテーブルから列をアクセスするまで

Inherits="System.Web.Mvc.ViewPage<IEnumerable<Bailiffs.Models.File>>" 

これは結構ですaspnet_Usersまたはaspnet_Rols。私は、私の見解がそれらのモデルを何も知らないからです。私の見解では、これらのモデルにどのようにアクセスできますか?

答えて

3

"f"はクエリから返されるだけなので、残りの部分は表示されません。

var files = from f in filesContext.Files 
        join u in filesContext.aspnet_Users on f.Uploader equals u.UserId 
        join uir in filesContext.aspnet_UsersInRoles on u.UserId equals uir.UserId 
        join ur in filesContext.aspnet_Roles on uir.RoleId equals ur.RoleId 
        select new { f, u, uir, ur}; 

あなたは "F"、 "U"、 "UIR"、 "ウル" を保持するために名前付きの型(クラス)を定義し、もちろん必要になります。次に、あなたのビューで

class FileInfo 
{ 
    public FileType File { get; set; } 
    public UserType User { get; set; } 
    public UserInRoleType UserInRole { get; set; } 
    public UserRoleType UserRole { get; set; } 
} 


var files = from f in filesContext.Files 
        join u in filesContext.aspnet_Users on f.Uploader equals u.UserId 
        join uir in filesContext.aspnet_UsersInRoles on u.UserId equals uir.UserId 
        join ur in filesContext.aspnet_Roles on uir.RoleId equals ur.RoleId 
        select new FileInfo { File = f, User = u, UserInRole = uir, UserRole = ur}; 

Inherits="System.Web.Mvc.ViewPage<IEnumerable<Bailiffs.Models.FileInfo>>" 
+0

、それは間違いなくだけでテーブルを結合するため、UserInRoleプロパティのおそらく必要はありません。 – tvanfosson

+0

@tvanfosson:はい、そうです。おそらくロール割り当てのタイムスタンプか何か他の情報がそこに格納されていない限り、おそらくドロップすることができます。 – User

2

必要なものをすべて保持するクラスを作成し、そのクラスのインスタンスをモデルとしてビューに渡すことができます。

2

はあなたのファイル、ユーザー、およびロールを保持しているビュー固有のモデルを作成します。クエリでこれらの新しいクエリを選択します。これをViewPageのモデルとして設定します。

モデル

public class OwnedFile 
{ 
    File File { get; set; } 
    User User { get; set; } 
    Role Role { get; set; } 
} 

クエリ

var files = from f in filesContext.Files 
       join u in filesContext.aspnet_Users on f.Uploader equals u.UserId 
       join uir in filesContext.aspnet_UsersInRoles on u.UserId equals uir.UserId 
       join ur in filesContext.aspnet_Roles on uir.RoleId equals ur.RoleId 
       select new OwnedFile { File = f, User = u, Role = ur }; 

ビュー

Inherits="System.Web.Mvc.ViewPage<IEnumerable<Bailiffs.Models.OwnedFile>>" 
関連する問題