19

私は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; }
}
4

1 に答える 1

42

結合テーブルのテーブル名を設定するには、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 リレーションシップ マッピング チュートリアルを参照してください。

于 2012-08-02T02:04:24.017 に答える