使用带有Code First方法的Entity Framework时,我遇到了一个非常奇怪的问题。 我已禁用延迟加载,并在需要时使用include语句。 不幸的是,我无法向您展示代码,但会尽量详细解释。
我有两个表,其中一个是指另一个:
TableA (ID, Name)
TableB (ID, ForeignKeyTableA)
相应的课程:
public class A
{
public int ID { get; set; }
public string Name { get; set; }
}
public class B
{
public int ID { get; set; }
public A ClassA { get; set; }
}
我可以自己加载A和B而没有问题,但是当我写例如: 在加载B并最终调用ToList()时包含(p => p.A)它会在一段时间后导致OutOfMemoryException。
这些表格并不大。表A有大约600条记录和表B 5记录。
A类的映射如下所示:
this.ToTable("TableA");
this.HasKey(p => p.ID);
this.Property(p => p.ID).HasColumnName("ID");
this.Property(p => p.ID).HasColumnName("Name");
B类的映射如下所示:
this.ToTable("TableB");
this.HasKey(p => p.ID);
this.Property(p => p.ID).HasColumnName("ID");
HasRequired(p => p.A).WithOptional()
.Map(m => m.MapKey("ForeignKeyTableA"));
我需要映射它们,因为列和表名不符合惯例。 Include可以在其他对象上使用而没有任何问题。
最奇怪的是,当我使用Include()时,数据库永远不会被命中。
有人有建议吗?因为我现在真的没想完了。