该应用程序对预先存在的数据库使用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");
            });
    }
}

最佳答案

虽然我希望删除问题并转瞬即逝,但我还是把它留给以后参考,以及其他像我这样的EF傻瓜。

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

不幸的是,尽管FanMap存在,但它不是添加到Configurations的那些类之一。我添加了它,现在一切正常。

关于c# - 单向DB首先与 map 多对多似乎仍需要导航属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32838009/

10-13 03:04