ASP.Net MVC 如何在 ApplicationUser 和我自己的 class 之间创建一对多关系?

ASP.Net MVC How to create a one-to-many relationship between the ApplicationUser and my own class?

我正在 Visual Studio 社区 2015 中创建一个 ASP.Net MVC 项目,我必须在其中允许用户创建和管理广告。这是一对多关系,意味着用户可以根据需要创建任意数量的广告。每个用户都可以看到所有广告,但只有创建它们的用户才能编辑它们。由于 MVC 模板已经实现了 Identity,我想使用 class ApplicationUser 作为我的用户 class。

我在模型文件夹中添加了一个 class 广告,如下所示:

 public class Advertisement
{
    public int AdvertisementId { get; set; }
    public string Description { get; set; }

    public string ApplicationUserID { get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }
}

然后我将 Advertisement DbSet 添加到 ApplicationDbContext class:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext() : base("DefaultConnection", throwIfV1Schema: false) {}

    public DbSet<Advertisement> Advertisements { get; set; }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

之后,我启用迁移并重建解决方案:

Enable-Migrations
add-migrations InitialCreate
update-database

至此一切顺利。现在我的问题来了。我现在尝试通过添加带有 "MVC 5 Controller with views, using Entity Framework" 模板的广告控制器来搭建脚手架,但生成的控制器带有以下 error,每次 db.ApplicationUsers 出现在控制器上时都会出现。我不知道我做错了什么,我在 Whosebug 和互联网上到处查看,但 none 的解决方案对我有用。您认为可能有什么问题?

ApplicationUser 只是为您创建的 class 身份。 Identity 存储用户数据的实际 table 是 AspNetUsers,因此

db.AspNetUsers

应该适合你。

首先你需要在 ApplicationUserAdvertisment 之间添加 link,找到 ApplicationUser class 并添加:

public class ApplicationUser : IdentityUser
{
    // Add this line
    // vvvvvvvvvvvvv
    public virtual ICollection<Advertisment> Advertisments { get; set; }
}

在您的操作方法中,您通过以下方式访问用户:

db.Users