应用程序对预先存在的数据库使用EF 6.1。
我有一个单向的多对多关系(类名已更改为使此示例更为简洁)Fans
到Celebrities
。例如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");
});
}
}
答案 0 :(得分:1)
虽然我很乐意删除这个问题然后悄悄离开,但我会留下它以供将来参考以及像我这样的其他明显的EF新手。
在我的数据上下文类中有一个OnModelCreating(DbModelBuilder modelBuilder)
覆盖,在此覆盖中有许多地图类分配给modelBuilder.Configurations
。
不幸的是,虽然存在FanMap
,但它不是添加到Configurations
的其中一个类。我添加了它,现在事情正常。