我一直在尝试在我的项目中添加一个Controller,但我一直在收到错误
An item with the same key has already been added.
这样做的时候。
我还是初学者,所以我可能没有注意到某些东西,但是我的模型中没有看到任何重复的密钥。这是我的数据库图,以便大致了解我正在尝试的内容做:
在尝试创建Applications
并收到错误
Model Class
作为ApplicationServices
而data Context Class
作为ApplicationController
An item with the same key has already been added.
任何想法我可能做错了什么?
我创建的模型如下:
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; }
}
}
答案 0 :(得分:0)
您是否也可以添加Application Controller
代码?
但我怀疑,这可能是因为你的某些实体被定义为没有自动生成的主键,当它们创建对象时,它们都将具有相同的键。
我会假设所有的键都被设置为空字符串或NULL,因此当使用NULL键检查其他内容时,它会得到一个匹配...
(对不起,我对EF没有最好的理解,只是想一想!)
答案 1 :(得分: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