0

我正在检索这样的实体列表:

var traductions = from t in context.Traductions
                        where t.User.ID == user.ID
                        && (DateTime.Now < t.EndDate)
                        select t;

var list = traductions.ToList();

这是模型:

Here is the first class :

    public class Original
    {
    public int ID { get; set; }
    public string Name { get; private set; }
    public Traduction Traduction { get; private set; }
    }

这是第二节课:

   public class Traduction
   { 
    public int ID { get; set; }
    public Original Original { get; private set; }
    public string Content { get; private set; }
   }

我得到 4 个实体 - 这很好 - 但是我检索到的一些对象的属性之一是 null - Original。在 4 个对象中的 3 个中,Original 属性为空,但此属性在第 4 个中正确填充。我已经直接检查了数据库并且主键/ FK是一致的。

你怎么看待这件事?我不明白,因为通常如果出现问题,对于所有检索到的对象,此属性都应为 null,但此处为其中一个对象正确填充了该属性。

谢谢

4

1 回答 1

2

我的第一个想法是你可能有一个循环引用。是否有可能有一个包含包含第一个 Traduction 的 Original 的 Traduction?如果你这样做,那可能就是你所看到的。如果/当您尝试序列化事物时,您肯定会遇到问题。

以下内容无助于循环引用,但可能是数据未按您预期加载的原因。

您可以尝试使用延迟加载。为此,您将在类中使用“虚拟”关键字,例如:

public class Original
{
    public int ID { get; set; }
    public string Name { get; private set; }
    public virtual Traduction Traduction { get; private set; }
}

public class Traduction
{ 
    public int ID { get; set; }
    public virtual Original Original { get; private set; }
    public string Content { get; private set; }
}

或者您可以专门在查询中包含对象:

var traductions = from t in context.Traductions.Include("Original")
                  where t.User.ID == user.ID
                  && (DateTime.Now < t.EndDate)
                  select t;
于 2014-07-30T17:58:00.640 回答