От многих до многих отношений в EF5 Code First, как я могу указать имя таблицы?

Я новичок в EF, и я не уверен, как это сделать.

У меня есть отношение "многие ко многим", точно так же:

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

Ответы

Ответ 1

Вам необходимо использовать 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");
            });
     }
}

Вы можете ознакомиться с этим учебным пособием по взаимодействию с Fluent API для получения дополнительной информации