4

プロジェクトにコントローラを追加しようとしましたが、エラーが発生しました

An item with the same key has already been added. 

そうしている間。

私はまだ初心者なので、何か気づいていないかもしれませんが、モデルに重複したキーは見当たりません.

データベース図

私を作成しようとしてエラーが発生している間、私はApplicationsasModel ClassApplicationServicesasを使用していますdata Context ClassApplicationController

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);

        }
    }
}

アプリケーション.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; }
    }
}

ユーザー.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

あなたのApplication Controllerコードも含めていただけますか?

しかし、エンティティの一部が自動生成された主キーを持たないと定義されているため、オブジェクトが作成されると、すべて同じキーを持つ可能性があると思われます。

すべてのキーが空の文字列または NULL として設定されていると想定しているため、NULL のキーを使用して何か他のものをチェックすると、すでに一致しています...

(申し訳ありませんが、私は EF をよく理解していませんが、ただの考えです!)

于 2013-01-07T11:44:40.210 に答える
0

これが発生する理由の 1 つは、ビュー モデルから同じプロパティを 2 回持っている場合です。たとえば、UserNameあるクラスにあり、別のクラスにあり、両方がビューに存在する場合です。これにより、重複UserNameキーが作成されます。

これは、1 つのクラスに同じ名前のプロパティが 2 つあるときに経験しました。1 つは public フィールド メンバーで、もう 1 つは 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 に答える