2012-08-02 7 views
15

私はEFにはかなり新しく、これをどうやって行うのか本当に分かりません。 EF5コードの多対多関係まず、どのようにテーブル名を指定できますか?

は、私は、まさにこのように、多対多の関係を持っている:

enter image description here

私は、プロファイル(Perfil)へのリソース(Recurso)を追加しようとすると、私は次のエラーを取得します:地獄はRecursoPerfilsから来たの

Invalid object name 'dbo.RecursoPerfils

この関係のテーブル名を(できれば属性注釈で)指定するにはどうすればよいですか?あなたが参加するテーブルのテーブル名を設定するには、流暢APIを使用する必要が

[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; } 
} 

答えて

34

は、下のモデルを参照してください。あなたはより多くの情報のため、このFluent API relationship mapping tutorial通過することができ

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

+0

ありがとうございました。 Fluent APIと属性だけを使用せずにこれを行う方法はないと思いますか? –

+1

@ConradClarkはい。属性は完全な構成機能を提供しません。 – Eranga

+0

偉大な答え。ありがとう! –

関連する問題