Many to Many relationship in Asp.Net MVC 5 with Identity table and Custom table

asp.net-mvc-5 ef-code-first entity-framework entity-framework-6 foreign-keys

Question

I'm trying to make a relationship between the Users from the table generated by Asp.Net Identity with my own table. The relationship must be many to many, since many Users can work on the same Task (which is my table), and same time an User can work on multiple Tasks.

public class Task
{      
    public int ID { get; set; }
    public string Name { get; set; }

    public string UserID { get; set; }

    public virtual ICollection<ApplicationUser> Users { get; set; }
}

public class ApplicationUser : IdentityUser
{
    public int TaskID { get; set; }
    public virtual ICollection<Task> Tasks{ get; set; }

    // rest of the code
}

I try it this way but I get an error during migration (or run time)

"One or more validation errors were detected during model generation:" enter image description here

Please help me solve this problem and archive what I need.

1
3
9/24/2016 12:35:33 PM

Accepted Answer

Try it like this:

  1. public class Projects
    {
        public Projects()
        {
            ApplicationUser = new HashSet<ApplicationUser>();
        }
        public int Id { get; set; }
        public string Name { get; set; }
        public virtual ICollection<ApplicationUser> ApplicationUser { get; set;     }
    }
    
  2. Application User



    public class ApplicationUser : IdentityUser
    {
        public ApplicationUser()
        {
            Projects = new HashSet<Projects>();
        }
        public async Task GenerateUserIdentityAsync(UserManager manager)
        {
            // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
            var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
            // Add custom user claims here
            return userIdentity;
        }        
        public virtual ICollection <Projects > Projects { get; set; }
    }

  1. Application Context :


    public class ApplicationDbContext : IdentityDbContext
    {
        public ApplicationDbContext()
            : base("DefaultConnection", throwIfV1Schema: false)
        {
        }
        public virtual DbSet<Projects> Projects { get; set; }

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

now when I run this Mvc app and register, the db tables I get is like the following:

From MSSQL

and the correct schema:

enter image description here

The things to be questioned are a lot, from my point of view important is to determine if you: - can/should you mix application context and your model context ?

4
9/24/2016 5:22:54 PM

Popular Answer

Error text is not related to your many-to-many relationship. It tips that other built-in entities are not configured properly. So, It would be nice if you provided full definition of your custom DbContext-class and how it is configured.

UPDATE

As i understood u are working with two different contexts. You must work with the same context, cause of u are extending IdentityContext, creating relationships and adding custom types. So problem then will be resolved itself. Hope, this will help.



Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow