【问题标题】:Many to many relationships in EF5 Code First, how can I specify table name?EF5 Code First中的多对多关系,如何指定表名?
【发布时间】:2012-07-30 23:25:14
【问题描述】:

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

【问题讨论】:

    标签: ef-code-first many-to-many entity-framework-5


    【解决方案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 relationship mapping tutorial 了解更多信息

    【讨论】:

    • 谢谢。我认为如果不使用 Fluent API 而只使用属性就无法做到这一点?
    • @ConradClark 是的。属性不提供完整的配置功能。
    • 通过 Map 方法,您也可以使用完全流畅的语法。在我看来更好看。 .Map( mc =&gt; mc.MapLeftKey("IdPerfil").MapRightKey("IdRecurso").ToTable("PerfilRecurso") )
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多