2011-10-08 42 views
0

在我的MVC項目中開始使用CodeFirst並遇到一些麻煩。 我有一些預定義模式的使用數據庫。 有一些表:使用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 

和many-to-許多地方semid的參考Seminars.ID和REFID參考Persons.ID

我試圖連接表

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

修復我使用配置類的CodeFirst架構綁定:

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

以及與此代碼註冊它:

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

但是,當我使用這個模型出錯運行應用程序 - CodeFirst試圖找到一些表「dbo.People」,它不存在(預期)(?!)。感謝您的好回答!

回答

1

嘗試改變這樣的代碼,

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

問題是ToTable( 「人」)沒有任何理由。問題在於「QualRef」表格 – DrAlligieri

+0

您是否試過我的代碼?嘗試更改代碼中'OnModelCreating'中的代碼順序,以便在'modelBuilder.Configurations.Add(new PersonConfiguration());'後面的末尾調用base方法。 –

+0

是的,Jayantha,我試過了。問題是(如我所想)EF試圖創建(或關聯)連接表的新映射。它爲什麼這樣做 - 我不知道。 – DrAlligieri