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

前端 未结 3 1161
野的像风
野的像风 2021-01-06 16:46

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

相关标签:
3条回答
  • 2021-01-06 17:26

    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.

    0 讨论(0)
  • 2021-01-06 17:29

    You can try it as shown below using Fluent API.

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
    
        modelBuilder.Entity<Task>()
                    .HasMany<ApplicationUser>(s => s.Users)
                    .WithMany(c => c.Tasks)
                    .Map(cs =>
                            {
                                cs.MapLeftKey("TaskRefId");
                                cs.MapRightKey("ApplicationUserRefId");
                                cs.ToTable("TaskApplicationUser");
                            });
    
    }
    

    Update : you can see this link too.

    EntityType 'IdentityUserLogin' has no key defined. Define the key for this EntityType

    0 讨论(0)
  • 2021-01-06 17:45

    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:

    and the correct schema:

    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 ?

    0 讨论(0)
提交回复
热议问题