0

[ Entity Framework 5.0 RC で Code First DbContext を使用する ]

何が起こっているかわからない?

  • 個人Tracksが保管されている
  • そして個人PlaybackEventsが保存されます
  • しかし、私がそうするとき、ICollection<PlaybackEvent>のは移入されませんTrackvar tracks = myDbContext.Tracks.ToList();
  • 私はいくつかのmyDbContext.Tracks.Add(track); myDbContext.SaveChanges();場所で保存しましたがtrackPlaybackEventsICollection<PlaybackEvents>

うまくいけばトラックの関連部分

public class Track 
{
    public string Id {get; set;}

    private ICollection<PlaybackEvent> _playbackEvents;

    public ICollection<PlaybackEvent> PlaybackEvents
    {
        get { return _playbackEvents ?? (_playbackEvents = new List<PlaybackEvent>()); }
        set { _playbackEvents = value; }
    }
}

簡略化された PlaybackEvent

public class PlaybackEvent {
    public string Id {get; set;}

    public string Track_Id { get; set; }
}
4

1 に答える 1

1

ナビゲーションICollectionプロパティである は、 として宣言する必要がありますvirtual

コードへの追加の提案は、ナビゲーション プロパティのゲッターとセッターを明示的に宣言するのではなく、セッターの責任をコンストラクターに移すことです。コードを次のようにします。

public class Track  
{ 
    public Track()
    {
        this.PlaybackEvents = new HashSet<PlaybackEvent>();
    }

    // Primary key
    public string Id {get; set;} 

    // Navigation property
    public virtual ICollection<PlaybackEvent> PlaybackEvents { get; private set; } 
 }

エンティティには、 1 つのTrack から複数PlaybackEvents への関係PlaybackEventを有効にするためのナビゲーション プロパティも必要です。

public class PlaybackEvent 
{  
    // Primary key
    public string Id {get; set;}  

    // Foreign key
    public string Track_Id { get; set; }  

    // Navigation property
    public virtual Track Track { get; set; }
}  
于 2012-07-11T06:57:03.857 に答える