2011-10-08 11 views
0

Commencez à utiliser CodeFirst dans mes projets MVC et rencontrez des problèmes. J'ai une base de données en cours d'utilisation avec un schéma prédéfini. Il y a quelques tables:Mappage plusieurs-à-plusieurs personnalisé avec CodeFirst

[Persons] 
[ID] [bigint] IDENTITY(1,1) NOT NULL, 
[Name] [nvarchar](30) NOT NULL, 
[Birthday] [datetime] NOT NULL, 
[Address] [nvarchar](30) NOT NULL, 
[Zip] [nvarchar](5) NOT NULL, 
[City] [nvarchar](30) NOT NULL, 
[Tax] [money] NOT NULL, 
[Memo] [varbinary](max) NULL 

[Seminars] 
[ID] [bigint] IDENTITY(1,1) NOT NULL, 
[Name] [nvarchar](20) NOT NULL 

et bien à plusieurs table reliée

[QualRef] 
[SemID] [bigint] NOT NULL, 
[RefID] [bigint] NOT NULL 

où SEMID fait référence à Seminars.ID et RefID référencé à Persons.ID

Je suis en train pour corriger ma liaison de schéma CodeFirst à l'aide de la classe de configuration:

class PersonConfiguration : EntityTypeConfiguration<Person> 
    { 
     internal PersonConfiguration() 
     { 
      this.HasMany(i => i.Seminars) 
       .WithMany(c => c.Persons) 
       .Map(mc => 
       { 
        mc.MapLeftKey("SemID"); 
        mc.MapRightKey("RefID"); 
        mc.ToTable("QualRef"); 
       }); 
     } 
    } 

et l'enregistrer avec ce code:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Person>().ToTable("Persons"); 
     base.OnModelCreating(modelBuilder); 
     modelBuilder.Configurations.Add(new PersonConfiguration()); 
    } 

Mais quand je lance l'application en utilisant cette erreur est survenue modèles - CodeFirst essayant de trouver une table « dbo.People » et il n'existe pas (prévu) (?!). Merci pour les bonnes réponses!

Répondre

1

Essayez de changer le code comme celui-ci,

problème
class PersonConfiguration : EntityTypeConfiguration<Person> 
    { 
     public PersonConfiguration() 
     { 
      ToTable("Persons"); 

      this.HasMany(i => i.Seminars) 
       .WithMany(c => c.Persons) 
       .Map(mc => 
       { 
        mc.MapLeftKey("SemID"); 
        mc.MapRightKey("RefID"); 
        mc.ToTable("QualRef"); 
       }); 
     } 
    } 

// ...

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 


      modelBuilder.Configurations.Add(new PersonConfiguration()); 
      base.OnModelCreating(modelBuilder); 
     } 
+0

est que Totable ("Personnes Habilitées") n'ont pas de raison. Le problème est avec la table "QualRef" – DrAlligieri

+0

Avez-vous essayé mon code? Essayez de changer l'ordre du code dans 'OnModelCreating' dans votre code pour appeler la méthode de base à la fin après' modelBuilder.Configurations.Add (new PersonConfiguration()); '. –

+0

Oui, Jayantha, j'ai essayé ça. Le problème est que (comme je le pense) EF essayant de créer (ou associer) une nouvelle cartographie pour la table de connexion. Pourquoi ça fait ça - je ne sais pas. – DrAlligieri

Questions connexes