4

我一直在尝试在我的项目中添加一个控制器,但我一直收到错误消息

An item with the same key has already been added. 

同时这样做。

我仍然是这方面的初学者,所以我可能没有注意到什么,但我没有在我的模型中看到任何重复的键。这是我的数据库图表,可以大致了解我正在尝试做的事情:

数据库图

我正在使用Applicationsas theModel ClassApplicationServicesas the data Context Classwhile 试图创建我的ApplicationController并得到错误

An item with the same key has already been added.  

有什么想法我可能做错了吗?

我创建的模型如下:

实体.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);

        }
    }
}

应用程序.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; }
    }
}

地址.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; }
    }
}

用户.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

2 回答 2

0

发生这种情况的原因之一是您的视图模型中有两次相同的属性。例如,如果您有UserName一个班级,而您有另一个班级,并且两者都出现在您的视图中。这将创建一个重复的UserName密钥。

当我在一个类中有两个同名的属性时,我遇到了这种情况。一个是公共字段成员,另一个是 get/set 访问器

public class User
{
   public string userName;  // <---- this should be private

   public string UserName
   {
     get { return userName; }
     set { userName = value; }
   }
}

注意 C# 没有因为区分大小写而抱怨。我通过使字段变量解决了这个问题private

于 2013-02-28T17:45:37.580 回答
0

Application Controller也可以包括你的代码吗?

但我怀疑,这可能是因为您的某些实体被定义为没有自动生成的主键,当它们创建对象时,它们都将具有相同的键。

我会假设所有的键都设置为空字符串或 NULL,所以当使用 NULL 键检查其他内容时,它已经得到匹配...

(对不起,我对EF没有最好的理解,只是一个想法!)

于 2013-01-07T11:44:40.210 回答