0

私はasp.net mvcが初めてで、asp.net Webフォームで非常に簡単に解決できると思う問題があります。ただし、プロジェクトは mvc にある必要があるため、ここに問題があります。

Xテーブルを手に入れました

table1 ユーザー int user_ID 文字列 ユーザー名

table2 Friends int friendsID int user_ID int friend_ID

表 2 の user_ID は、現在ログインしているユーザーを表します。friend_ID は、友人の ID を表します。その一対多の関係。今私がやりたいことは、ユーザー/詳細/ID ビューで、そのユーザーのすべての友達を表示することです。私が作成したいクエリは次のとおりです。まず、user_ID = id (クエリ文字列から) の table2 から friend_ID を選択し、次に user_ID = friend_ID である table1 からすべてのユーザー名を選択します。

これは SQL では非常に簡単だと思いますが、mvc 構文でそれを行う方法がわかりません。

コントローラー:

// // GET: /ユーザー/詳細/5

    public ViewResult Details(int id)
    {
        User user = db.Users.Find(id);
        return View(user);
    }

景色:

@model Social2.Models.User

<div class="display-label">Friends</div>
<div class="display-field">

    @foreach (var friend in @Model.Friends)
    {
        @friend.User.username;
    }

</div>

ビューは間違った結果を返します。

モデル

public partial class User
{
    public User()
    {
        this.Albums = new HashSet<Album>();
        this.Friends = new HashSet<Friend>();
        this.Messages = new HashSet<Message>();
        this.Posts = new HashSet<Post>();
        this.Groups = new HashSet<Group>();
    }

    public int user_ID { get; set; }
    public System.Guid user_UniqueID { get; set; }
    public string username { get; set; }

    public virtual ICollection<Album> Albums { get; set; }
    public virtual aspnet_Users aspnet_Users { get; set; }
    public virtual ICollection<Friend> Friends { get; set; }
    public virtual ICollection<Message> Messages { get; set; }
    public virtual ICollection<Post> Posts { get; set; }
    public virtual ICollection<Group> Groups { get; set; }
}

そして友達のテーブルから

public partial class Friend
{
    public int friendship_ID { get; set; }
    public int user_fr_ID { get; set; }
    public int friend_ID { get; set; }

    public virtual User User { get; set; }
}

文脈も

public partial class ASPNETDBEntities : DbContext
{
    public ASPNETDBEntities()
        : base("name=ASPNETDBEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public DbSet<Album> Albums { get; set; }
    public DbSet<aspnet_Users> aspnet_Users { get; set; }
    public DbSet<Friend> Friends { get; set; }
    public DbSet<Group> Groups { get; set; }
    public DbSet<Message> Messages { get; set; }
    public DbSet<Picture> Pictures { get; set; }
    public DbSet<Post> Posts { get; set; }
    public DbSet<sysdiagram> sysdiagrams { get; set; }
    public DbSet<User> Users { get; set; }
}
4

2 に答える 2

0

独自のViewModelクラスを作成します。データベースからデータを取得し、モデルクラスオブジェクトを構築します。このモデルクラスをビューに渡します。つまり、このモデルクラスに基づいてビューを作成します。

于 2012-06-12T07:07:32.133 に答える
0

フレンド リスト プロパティは仮想であるため、クエリには含まれません。以下のクエリを使用して、フレンドを含めてみてください。

public ViewResult Details(int id)
    {
        User user = db.Users.Include("Friends").FirstOrDefault(u => u.user_ID == id);
        //Also for each friend get the User:
        foreach (var friend in user.Friends.ToList())
        {
          friend.User = db.Users.Find(friend.friend_ID);
        }   
        return View(user);
    }

意見:

<table>
@foreach (var friend in @Model.Friends)
    {

        <tr>

            @Html.DisplayFor(modelItem => friend.User.username)
        </tr>
    } 
</table>

モデル クラスは、エンティティ キーの規則に従っていないようです。フィールド「user_ID」および「friendship_ID」は、UserId および FriendId である必要があります。または、そのようにキーを設定したい場合は、[key] 属性で注釈を付けます。

于 2012-06-12T07:09:22.797 に答える