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 回答