2014-01-10 160 views
1

我有一个WCF项目,并使用实体框架v6和代码优先生成数据库。 但我有一个用户和FeedRss类之间的关系问题。我想为每个用户提供几个FeedRss。我的代码工作(没有例外),但不加入ICollection供稿(用户),这个列表在数据库恢复后是空的。实体框架代码优先:一对多关系(空列表)

public class User 
{ 
    [Key] 
    public int UserID {get; set;} 
    ... 
    [InverseProperty("User")] 
    public ICollection<FeedRSS> feeds { get; set; } 

    public User() 
    { 
     feeds = new List<FeedRSS>(); 
    } 
} 

一个用户>许多feedRss

public class FeedRSS 
{ 
    [Key] 
    public int ID { get; set; } 
    ... 
    public int UserId { get; set; } 
    [ForeignKey("UserId")] 
    public User User { get; set; } 

    public FeedRSS() 
    { 
    } 
} 
public class UsersContext : DbContext 
{ 
    public DbSet<User> Users { get; set; } 
    public DbSet<FeedRSS> Feeds { get; set; } 
} 

我的测试我的代码功能(但返回一个空列表):

public User getUser(int Id) 
    { 
     using (UsersContext context = new UsersContext()) 
     { 
      return context.Users.ToList().Find(
        delegate(User u) { 
         return u.UserID == Id; 
        }); 
     } 
    } 

    public List<FeedRSS> getFeedListTest(User u) 
    { 
     using (UsersContext ctx = new UsersContext()) 
     { 
      User user = ctx.Users.First(i => i.UserID == u.UserID); 
      FeedRSS f = new FeedRSS() { name = "code", link = "uri" }; 
      user.feeds.Add(f); 
      //the list user.feeds lenght is = 1 
      ctx.SaveChanges(); 
      //update working 
     } 
     //get the same user in the database but the list uuu.feeds lenght is 0 :(
     User uuu = this.getUser(u.UserID); 
     return uuu.feeds.ToList(); 
    } 

我测试其他代码非常不同(流利的API,强制UserId在FeedRss ..),但我不明白,在实体框架的关系的原则。我曾尝试几个例子代码...

*很遗憾我的英语近似

+1

一个很好的文章,你可以添加的getUser方法的代码? 我认为你必须在你的查询中添加一个Include(p => p.feeds)。 – CodeNotFound

+1

完成,我不知道包括。我rtfm ^^ – poupou

回答

3

您可以负荷的饲料与Include(...)陈述CodeNotFound建议或您可以使feeds集合虚拟 - 这将启用延迟加载和EF将自动加载动态供应饲料。

public class User { 
    ... 

    [InverseProperty("User")] 
    public virtual ICollection<FeedRSS> feeds { get; set; } 
} 

你可以找到关于延迟加载,渴望装载在MSDN portal

+1

当虚''!我一直忘记它! –

相关问题