C# 为什么我所有的外键都是空的?

C# 为什么我所有的外键都是空的?,c#,sql-server,database,entity-framework,entity-framework-5,C#,Sql Server,Database,Entity Framework,Entity Framework 5,我一直在玩实体框架有一段时间了。然而,出于某种原因,外键似乎都是空的,直到我明确使用Include方法来包含它们 根据我在这里读到的: 通过使它们成为虚拟的,它们应该是延迟加载的(而不是null) 这是我的模型: class AltiGoalInfo { public int AltiGoalInfoId { get; set; } public int ShotTime { get; set; } //Time it took from shooting till scorin

我一直在玩实体框架有一段时间了。然而,出于某种原因,外键似乎都是空的,直到我明确使用Include方法来包含它们

根据我在这里读到的: 通过使它们成为虚拟的,它们应该是延迟加载的(而不是null)

这是我的模型:

class AltiGoalInfo
{
    public int AltiGoalInfoId { get; set; }
    public int ShotTime { get; set; } //Time it took from shooting till scoring
    public virtual AltiPlayerInfo AltiPlayerInfo { get; set; }
    public virtual AltiTeamEnum Team { get; set; }

    public override string ToString()
    {
        double shotTime = ShotTime;
        shotTime /= 1000;
        shotTime = Math.Round(shotTime, 2);
        return shotTime + " by " + AltiPlayerInfo;
    }
}



class AltiPlayerInfo
{
    public int AltiPlayerInfoId { get; set; }
    public String VaporId { get; set; }

    public String LastKnownNickname { get; set; }
    public int LastKnownLevel { get; set; }
    public int LastKnownAceRank { get; set; }
    public Boolean LastKnownDemo { get; set; }

    private IList<String> _knownIps = new List<String>();
    public IList<String> KnownIps
    {
        get
        {
            return _knownIps;
        }
        set
        {
            _knownIps = value;
        }
    }

    public string KnownIpsString
    {
        get
        {
            return String.Join(";", _knownIps);
        }
        set
        {
            _knownIps = value.Split(';').ToList();
        }
    }

    public int Goals { get; set; }
    public int MatchesPlayed { get; set; }
    public int MatchesWon { get; set; }

    public double CalcWinRate()
    {
        double mwon = MatchesWon;
        double mplay = MatchesPlayed;
        double result = mwon / mplay * 100.0;
        return Math.Round(result, 0);
    }

    public DateTime FirstSeen { get; set; }
    public DateTime LastSeen { get; set; }

    public override string ToString()
    {
        return LastKnownNickname;
    }
}



class AltiDbContext : DbContext
{
    public DbSet<AltiPlayerInfo> AltiPlayerInfos { get; set; }
    public DbSet<AltiGoalInfo> AltiGoalInfos { get; set; }
}
但是,当我首先手动包含时,它确实起作用:

var test = altiDbContext.AltiGoalInfos.Include(t => t.AltiPlayerInfo).First();
var brrr = test.AltiPlayerInfo;
编辑:
我还验证了DbContext的配置,默认情况下,配置中的所有设置都设置为true(这将启用延迟加载)。

我找到了解决方案,我必须公开模型类

随时从问题标题中删除
实体框架
标记,这是不必要的,因为您已经相应地标记了这个问题:)我发现它更清晰了,因为我也经常忽略标记:)我相信您还可以将类设置为内部类。
var test = altiDbContext.AltiGoalInfos.Include(t => t.AltiPlayerInfo).First();
var brrr = test.AltiPlayerInfo;