在使用带有代码优先方法的实体框架时,我遇到了一个非常奇怪的问题。我已禁用延迟加载,并在需要时使用包含语句。不幸的是,我无法向您展示代码,但会尽可能详细地解释。
我有两张表,一张是指另一张:
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() 时的 Include(p => pA) 时,它会在一段时间后导致 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() 时,数据库永远不会被命中。
有人有建议吗?因为我现在真的没有想法了。