该应用程序对预先存在的数据库使用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");
});
}
}
最佳答案
虽然我希望删除问题并转瞬即逝,但我还是把它留给以后参考,以及其他像我这样的EF傻瓜。
在我的数据上下文类中,有一个OnModelCreating(DbModelBuilder modelBuilder)
替代,在此替代中,有许多分配给modelBuilder.Configurations
的地图类。
不幸的是,尽管FanMap
存在,但它不是添加到Configurations
的那些类之一。我添加了它,现在一切正常。
关于c# - 单向DB首先与 map 多对多似乎仍需要导航属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32838009/