0

私はしばらくの間、Entity Framework をいじっています。ただし、何らかの理由で、Include メソッドを明示的に使用してそれらを含めるまで、外部キーはすべて null のように見えます。

私がここで読んだことによると: Entity Framework 4.1 Virtual Properties は、それらを仮想化することにより、遅延ロードする必要があります(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; }
}

次のコードを使用してデータにアクセスすると、brrr 変数が null になります。

var test = altiDbContext.AltiGoalInfos.First();
var brrr = test.AltiPlayerInfo;

ただし、最初に手動で含めると、機能します。

var test = altiDbContext.AltiGoalInfos.Include(t => t.AltiPlayerInfo).First();
var brrr = test.AltiPlayerInfo;

編集: DbContext の構成も確認しました。既定で​​は、構成のすべての設定が true に設定されています (これにより、遅延読み込みが有効になります)。

4

1 に答える 1

0

解決策を見つけたので、モデル クラスを公開する必要がありました

于 2013-08-17T21:13:28.863 に答える