いくつかのチュートリアルを説明しましたが、ログインしたユーザーを利用して情報をデータベースに保存する方法がすべて省略されているようです。私の要点を説明するために、私が使用してきたモデルを次に示します。
public class Note
{
public int ID { get; set; }
public int UserId { get; set; }
public string Text { get; set; }
}
これにより、各ユーザーはデータベースにメモを書き込むことができます。このモデルの CRUD コントローラーを作成したとき、更新/作成時にUserIdプロパティをWebSecurity.CurrentUserIdに更新しました。次に、データを取得するときに、linq 式で Where を使用してメモをフィルター処理します。何らかの理由で、これは単に間違っているように感じます。
さらに多くの例をトローリングすると、誰かがそうしているのに出くわしました。
public class Note
{
public int ID { get; set; }
public virtual UserProfile User { get; set; }
public string Text { get; set; }
}
public class NoteDbContext : DbContext
{
public DbSet<Note> Notes { get; set; }
}
モデルが C# で適切にリンクされているため、これはかなりきれいに見えます。そして、うわー、それは実際に構築されます!したがって、コントローラーで最初にデータベースからユーザー オブジェクトを取得し、次に Where リストを使用してメモを取得します。
//First get the logged in user
var user = dbUser.UserProfiles.Where(x => x.UserId == WebMatrix.WebData.WebSecurity.CurrentUserId).First();
//Now get all their notes
var notes = db.Notes.Where(x => x.User == user);
ただし、これは予期せず失敗します。では、データベース内の他のオブジェクトに対して UserProfile オブジェクトを保存するための良い方法のサンプルを誰か提供してもらえませんか? 基本的に、UserProfile オブジェクトを Note オブジェクトにリンクできるようになったことと、特定の UserId の Notes を適切にクエリする方法を示す良い例が必要です。