EF5 Code First中的多对多关系如何指定表名?

Con*_*ark 18 many-to-many ef-code-first entity-framework-5

我对EF很新,我不确定如何做到这一点.

我有一个多对多的关系,就像这样:

在此输入图像描述

当我尝试将资源(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; }
}
Run Code Online (Sandbox Code Playgroud)

Era*_*nga 40

您需要使用Fluent 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");
            });
     }
}
Run Code Online (Sandbox Code Playgroud)

您可以通过此Fluent API关系映射教程获取更多信息

  • @ConradClark是的。属性不提供完整的配置功能。 (2认同)
  • 使用Map方法,您也可以使用完全流畅的语法。我认为看起来更好。`.Map(mc =&gt; mc.MapLeftKey(“ IdPerfil”)。MapRightKey(“ IdRecurso”)。ToTable(“ PerfilRecurso”)))` (2认同)