0

在使用带有代码优先方法的实体框架时,我遇到了一个非常奇怪的问题。我已禁用延迟加载,并在需要时使用包含语句。不幸的是,我无法向您展示代码,但会尽可能详细地解释。

我有两张表,一张是指另一张:

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() 时,数据库永远不会被命中。

有人有建议吗?因为我现在真的没有想法了。

4

0 回答 0