单向数据库首先多对多地图仍然似乎需要一个导航属性

时间:2015-09-29 07:21:45

标签: c# .net entity-framework

应用程序对预先存在的数据库使用EF 6.1。

我有一个单向的多对多关系(类名已更改为使此示例更为简洁)FansCelebrities。例如Fan的每个实例都跟随一个或多个Celebrities,但Celebrity的每个实例都不会跟踪哪个Fans关注Celebrity

为此,Fan类具有ICollection<Celebrity>的导航属性,但反之亦然。正如您在下面的地图类中看到的那样,复合表将两者联系起来。

不幸的是,var celebrities = db.Celebrities.ToList();给我的错误是:

Invalid column name 'Fan_Id'.

有人可以告诉我我做错了什么吗?我在同一个应用程序中有许多单向一对多关系。实体及其地图的(有些)缩写纲要:

public class Celebrity
{
    public int Id { get; set; }
    public string Name { get; set; }
    // by design, no navigation property to ICollection<Fan>
}

public class Fan
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Celebrity> FollowedCelebrities { get; set; }
}

public class CelebrityMap : EntityTypeConfiguration<Celebrity>
{
    public CelebrityMap()
    {
        HasKey(t => t.Id);
        ToTable("Celebrities");
        Property(t => t.Id).HasColumnName("CelebrityId");
        Property(t => t.Description).HasColumnName("Name");
    }
}

public class FanMap : EntityTypeConfiguration<Fan>
{
    public FanMap()
    {
        HasKey(t => t.Id);
        ToTable("Fans");
        Property(t => t.Id).HasColumnName("FanId");
        Property(t => t.Name).HasColumnName("Name");

        HasMany(t => t.FollowedCelebrities)
            .WithMany()
            .Map(m =>
            {
                m.ToTable("FanCelebrityAssignments");
                m.MapLeftKey("FanId");
                m.MapRightKey("CelebrityId");
            });
    }
}

1 个答案:

答案 0 :(得分:1)

虽然我很乐意删除这个问题然后悄悄离开,但我会留下它以供将来参考以及像我这样的其他明显的EF新手。

在我的数据上下文类中有一个OnModelCreating(DbModelBuilder modelBuilder)覆盖,在此覆盖中有许多地图类分配给modelBuilder.Configurations

不幸的是,虽然存在FanMap,但它不是添加到Configurations的其中一个类。我添加了它,现在事情正常。

相关问题