实体框架6与MVC 5 IdentityUser的一对多关系

时间:2014-02-01 18:01:31

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

任务:创建事件列表,每个事件都有一个用户列表。 问题:当用户列表是我自己的类时,我可以使用它,但现在我希望用户列表是ApplicationUser:IdentityUser,我似乎无法让它工作。

这是我的Event类和Fighter类:

public class Event
{
    public int EventId { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Fighter> Fighters { get; set; } 
}

public class Fighter
{
    public int FighterId { get; set; }
    public string Name { get; set; }
}

这是我的上下文设置:

namespace WebApplication6.Models
{
    public class ApplicationUser : IdentityUser
    {
        public string ExtraSetting1 { get; set; }
    }

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

        public DbSet<Event> Events { get; set; }
        public DbSet<Fighter> Fighters { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<Event>().HasMany(x => x.Fighters).WithMany();
        }

        IQueryable<Event> IEventDataSource.Events
        {
            get { return Events; }
        } 
    }
}

一切都很好,表格按照我的要求创建:

Event > Fighters

现在,当我想完全删除Fighter类并将其替换为ApplicationUser类时,我无法找到如何使其工作。这是我的尝试:

  1. 使用ICollection(IUser)
  2. 替换Event类中的ICollection(Fighter)
  3. 注释掉所有战斗机类(dbset)
  4. 我删除数据库并尝试执行“update-database”时得到的错误是: 导航属性'Fighters'不是'Event'类型的声明属性。验证它是否未从模型中明确排除,并且它是有效的导航属性。

    我明白这是一个配置问题,我需要向EF解释我希望它是如何相关的,但经过几个小时尝试不同的东西我希望一个善良的灵魂会告诉我我做错了什么以及如何解决它。

    提前谢谢!

0 个答案:

没有答案