我浏览了几个教程,似乎它们都忽略了如何利用登录用户将信息存储到数据库中。为了帮助我说明我的观点,这是我一直在使用的一个模型。
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。