ASP.NET Mvc3 / VS2010 error: an item with the same key has already been added

I try to add a controller to my project, but I get an error

An item with the same key has already been added. 

wherein.

I'm still new to this, so I may not have noticed anything, but I don't see duplicate keys in my model. This is my database diagram to get a general idea of ​​what I'm trying to do:

Database diagram

I use Applications as Model Class and ApplicationServices as data Context Class when trying to create my ApplicationController and get an error

 An item with the same key has already been added. 

Any ideas what I can do wrong?

The models I created are as follows:

Entity.cs:

 using Microsoft.VisualBasic; using System.Data.Entity; using System.Data.Entity.ModelConfiguration.Conventions; using System.ComponentModel.DataAnnotations; namespace PostGraduate.Models { public class ApplicationServices : DbContext { public DbSet<Application.Users> Users { get; set; } public DbSet<Application.Addresses> Addresses { get; set; } public DbSet<Application.Applications> Applications { get; set; } public DbSet<Application.ForeignLanguages> ForeignLanguages { get; set; } public DbSet<Application.Gmat> Gmat { get; set; } public DbSet<Application.PostGradStudies> PostGradStudies { get; set; } public DbSet<Application.PreGradStudies> PreGradStudies { get; set; } public DbSet<Application.Schoolarships> Schoolarships { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<Application.Users>().HasKey(a => a.UserId); modelBuilder.Entity<Application.Addresses>().HasKey(a => a.Addresses_Id); modelBuilder.Entity<Application.Applications>().HasKey(a => a.Applications_Id); modelBuilder.Entity<Application.Applications>().Property(a => a.Applications_Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); modelBuilder.Entity<Application.ForeignLanguages>().HasKey(a => a.ForeignLanguages_Id); modelBuilder.Entity<Application.Gmat>().HasKey(a => a.Gmat_Id); modelBuilder.Entity<Application.Gmat>().Property(a => a.Gmat_Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); modelBuilder.Entity<Application.PostGradStudies>().HasKey(a => a.PostGradStudies_Id); modelBuilder.Entity<Application.PostGradStudies>().Property(a => a.PostGradStudies_Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); modelBuilder.Entity<Application.PreGradStudies>().HasKey(a => a.PreGradStudies_Id); modelBuilder.Entity<Application.Schoolarships>().HasKey(a => a.Schoolarships_Id); modelBuilder.Entity<Application.Schoolarships>().Property(a => a.Schoolarships_Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); modelBuilder.Entity<Application.Users>().HasRequired(a => a.Applications).WithRequiredPrincipal(i => i.Users); modelBuilder.Entity<Application.Applications>().HasMany(a => a.Addresses).WithRequired(i => i.Applications).HasForeignKey(i => i.Application_Id); modelBuilder.Entity<Application.Applications>().HasMany(a => a.ForeignLanguages).WithRequired(i => i.Applications).HasForeignKey(i => i.Application_Id); modelBuilder.Entity<Application.Applications>().HasOptional(a => a.Gmat).WithRequired(i => i.Applications); modelBuilder.Entity<Application.Applications>().HasOptional(a => a.PostGradStudies).WithRequired(i => i.Applications); modelBuilder.Entity<Application.Applications>().HasMany(a => a.PreGradStudies).WithRequired(i => i.Applications).HasForeignKey(i => i.Application_Id); modelBuilder.Entity<Application.Applications>().HasOptional(a => a.Schoolarships).WithRequired(i => i.Applications); } } } 

Applications.cs:

 using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; namespace PostGraduate.Models.Application { public class Applications { public Applications() { this.Addresses = new HashSet<Addresses>(); this.PreGradStudies = new HashSet<PreGradStudies>(); this.ForeignLanguages = new HashSet<ForeignLanguages>(); } internal void BuildAddress(int p) { for (int i = 0; i < p; i++) { Addresses.Add(new Addresses()); } } internal void BuildPreGradStudies (int p) { for (int i = 0; i < p; i++) { PreGradStudies.Add(new PreGradStudies()); } } internal void BuildForeignLanguages(int p) { for (int i = 0; i < p; i++) { ForeignLanguages.Add(new ForeignLanguages()); } } public virtual Users Users { get; set; } public virtual Gmat Gmat { get; set; } public virtual PostGradStudies PostGradStudies { get; set; } public virtual Schoolarships Schoolarships { get; set; } public virtual ICollection<Addresses> Addresses { get; set; } public virtual ICollection<PreGradStudies> PreGradStudies { get; set; } public virtual ICollection<ForeignLanguages> ForeignLanguages { get; set; } [ScaffoldColumn(false)] public string Applications_Id { get; set; } [ScaffoldColumn(false)] public DateTime ApplicationDate { get; set; } [Required] public string FathersName { get; set; } [Required] public DateTime? Birthdate { get; set; } [Required] public string Birthplace { get; set; } [Required] public string Identification { get; set; } [Required] public string Country { get; set; } [Required] public string MobileNumber { get; set; } [Required] public string Profession { get; set; } public string Activity { get; set; } public string PostGradExtra { get; set; } public string PostGradReapplication { get; set; } public string ExtraInformation { get; set; } [Required] public string PostGradSource { get; set; } } } 

Addresses.cs:

 using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; namespace PostGraduate.Models.Application { public class Addresses { public virtual Applications Applications { get; set; } [ScaffoldColumn(false)] public string Addresses_Id { get; set; } [ScaffoldColumn(false)] public string Application_Id { get; set; } [Required] public string StreetAddress { get; set; } [Required] public string City { get; set; } [Required] public string PostalCode { get; set; } [Required] public string PhoneNumber { get; set; } } } 

ForeignLanguages.cs:

 using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; namespace PostGraduate.Models.Application { public class ForeignLanguages { public virtual Applications Applications { get; set; } [ScaffoldColumn(false)] public string ForeignLanguages_Id { get; set; } [ScaffoldColumn(false)] public string Application_Id { get; set; } public string Language { get; set; } public string LanguageDegree { get; set; } public string Admission { get; set; } public bool Delete { get; set; } } } 

Gmat.cs:

 using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; namespace PostGraduate.Models.Application { public class Gmat { public virtual Applications Applications { get; set; } [ScaffoldColumn(false)] public string Gmat_Id { get; set; } public DateTime? GmatDate { get; set; } public string GmatGrade { get; set; } } } 

PostGradStudies.cs:

 using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; namespace PostGraduate.Models.Application { public class PostGradStudies { public virtual Applications Applications { get; set; } [ScaffoldColumn(false)] public string PostGradStudies_Id { get; set; } public string Aei { get; set; } public string PostGradTitle { get; set; } public string PostGradLength { get; set; } public string PostGradGrade { get; set; } public string PostGradProject { get; set; } public string PostGradProjectGrade { get; set; } } } 

PreGradStudies.cs:

 using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; namespace PostGraduate.Models.Application { public class PreGradStudies { public virtual Applications Applications { get; set; } [ScaffoldColumn(false)] public string PreGradStudies_Id { get; set; } [ScaffoldColumn(false)] public string Application_Id { get; set; } public string University { get; set; } public string Department { get; set; } public string Admission { get; set; } public string Graduation { get; set; } public string DegreeGrade { get; set; } public string ThesisSubject { get; set; } public string ThesisGrade { get; set; } public bool Delete { get; set; } } } 

Schoolarships.cs:

 using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; namespace PostGraduate.Models.Application { public class Schoolarships { public virtual Applications Applications { get; set; } [ScaffoldColumn(false)] public string Schoolarships_Id { get; set; } public string Schoolar { get; set; } public string SchoolarshipProfession { get; set; } public string SchoolarshipInstitution { get; set; } } } 

Users.cs:

 using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; namespace PostGraduate.Models.Application { public class Users { public virtual Applications Applications { get; set; } public string UserId { get; set; } public string UserName { get; set; } } } 
+4
source share
2 answers

Could you also include Application Controller code?

But I suspect that this may be due to the fact that some of your entities are defined as not having auto-generated primary keys, that when creating objects they will have the same key.

I would suggest that all keys are given as empty strings or NULL, so when checking something else with the NULL key, it will already get a match ...

(sorry, I don't have a better understanding of EF, but just a thought!)

0
source

One of the reasons this can happen is because you have the same property twice from your view models. For example, if you have a UserName in a class, and you have it in another class, and both are present in your view. This would duplicate the UserName key.

I experienced this when I had two properties with the same name in the same class. One member is an open field and the other is get / set accessor

 public class User { public string userName; // <---- this should be private public string UserName { get { return userName; } set { userName = value; } } } 

The C # notification did not complain due to case sensitivity. I decided that by creating a private field variable

0
source

All Articles