2012-08-02 10 views
15

Ich bin ziemlich neu in EF, und ich bin nicht wirklich sicher, wie das geht.Viele zu viele Beziehungen im EF5-Code Wie kann ich zuerst den Tabellennamen angeben?

Ich habe eine viele-zu-viele-Beziehung, genau wie folgt aus:

enter image description here

Wenn ich versuche, eine Ressource (Recurso) zu einem Profil (Perfil) hinzuzufügen, ich die folgende Fehlermeldung erhalten:

Invalid object name 'dbo.RecursoPerfils

Wo zum Teufel aus hat RecursoPerfils kommen?

Wie kann ich den Tabellennamen für diese Beziehung angeben (vorzugsweise durch Attributannotation)?

Modelle anzeigen unter:

[Table("Perfil")] 
public class Perfil 
{ 
    public Perfil() 
    { 
     this.Usuarios = new List<Usuario>(); 
     this.Recursos = new List<Recurso>(); 
    } 

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    [Key] 
    public int IdPerfil { get; set; } 
    [Required] 
    public string Descricao { get; set; } 

    public virtual ICollection<Usuario> Usuarios { get; set; } 
    public virtual ICollection<Recurso> Recursos { get; set; } 
} 

[Table("Recurso")] 
public class Recurso 
{ 
    public Recurso() 
    { 
     this.Perfis = new List<Perfil>(); 
    } 

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    [Key] 
    public int IdRecurso { get; set; } 
    [Required]  
    public string NomeRecurso { get; set; } 
    [Required] 
    public string Descricao { get; set; } 
    public virtual ICollection<Perfil> Perfis { get; set; } 
} 

Antwort

34

Sie müssen Fluent API verwenden, um den Tabellennamen der Join-Tabelle zu konfigurieren.

public class MyContext : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Perfil>() 
      .HasMany(p => p.Recursos) 
      .WithMany(r => r.Perfis) 
      .Map(mc => 
      { 
       mc.MapLeftKey("IdPerfil"); 
       mc.MapRightKey("IdRecurso"); 
       mc.ToTable("PerfilRecurso"); 
      }); 
    } 
} 

Sie durch diese Fluent API relationship mapping tutorial für weitere Informationen gehen

+0

Danke. Ich nehme an, dass es keine Möglichkeit gibt, dies zu tun, ohne Fluent API und nur Attribute zu verwenden? –

+1

@ConradClark Ja. Attribute bieten nicht die vollständigen Konfigurationsfunktionen. – Eranga

+0

Große Antwort. Vielen Dank! –

Verwandte Themen