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

时间:2015-11-04 17:16:51

标签: c# asp.net-mvc entity-framework asp.net-identity one-to-many

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

我在我的Model文件夹中添加了一个类Avertisement,如下所示:

 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类:

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控制器,使用实体框架”模板来尝试脚手架,但生成的控制器附带了每次db.ApplicationUsers出现在控制器上时出现的以下error。我不知道我做错了什么,我在stackoverflow和互联网上到处都是,但没有一个解决方案适合我。您认为可能出错?

1

2 个答案:

答案 0 :(得分:1)

首先,您需要在ApplicationUserAdvertisment之间添加链接,找到ApplicationUser类并添加:

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

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

db.Users

答案 1 :(得分:0)

ApplicationUser只是Identity为您创建的一个类。 Identity存储用户数据的实际表是AspNetUsers,所以

db.AspNetUsers

应该适合你。