C# 首先使用代码自动检索复杂类型的ICollection

C# 首先使用代码自动检索复杂类型的ICollection,c#,.net,sql,entity-framework,orm,C#,.net,Sql,Entity Framework,Orm,[在实体框架5.0 RC中使用代码优先的DbContext] 不知道发生了什么 存储单个磁道 并存储单个播放事件 但是当我执行var tracks=myDbContext.tracks.ToList()时,Track的ICollection不会被填充 即使我使用myDbContext.Tracks.Add(track)保存;myDbContext.SaveChanges()其中track在ICollection 希望是轨道的相关部分 您的ICollection,这是您的导航属性,需要声明为v

[在实体框架5.0 RC中使用代码优先的DbContext]

不知道发生了什么

  • 存储单个
    磁道
  • 并存储单个
    播放事件
  • 但是当我执行
    var tracks=myDbContext.tracks.ToList()时,
    Track
    ICollection
    不会被填充
  • 即使我使用
    myDbContext.Tracks.Add(track)保存;myDbContext.SaveChanges()其中
    track
    ICollection
希望是轨道的相关部分
您的
ICollection
,这是您的导航属性,需要声明为
virtual

对代码的另一个建议是不要为导航属性显式声明getter和setter,而是将setter的职责转移到构造函数。使您的代码如下所示:

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)在构造函数中初始化ICollection 2)在两个中声明导航属性3)将导航属性声明为虚拟。p、 查看PlaybackEvents表,我看到两个字段,一个称为Track_Id,另一个称为Track_Id1,但它们都有相同的值,不确定为什么会有这样的重复。。
public class PlaybackEvent {
    public string Id {get; set;}

    public string Track_Id { get; set; }
}
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; } 
 }
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; }
}