2012-08-02 123 views
15

我對EF很新,我不確定如何做到這一點。EF5代碼中的多對多關係首先,我如何指定表名?

我有許多一對多的關係,正是這樣:

enter image description here

當我嘗試將資源(RECURSO)添加到配置文件(PERFIL),我收到以下錯誤:

Invalid object name 'dbo.RecursoPerfils

到底在哪確實來自RecursoPerfils

如何指定(最好通過屬性註釋)此關係的表名稱?

請參見下面的模型:

[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

您需要使用流暢API來配置連接表的表名。

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

你可以通過這個Fluent API relationship mapping tutorial更多信息

+0

謝謝。我假設沒有辦法做到這一點,而不使用Fluent API和屬性? – 2012-08-02 02:10:35

+1

@ConradClark是的。屬性不提供完整的配置功能。 – Eranga 2012-08-02 03:33:03

+0

很棒的回答。謝謝! – 2013-01-15 04:41:26

相關問題