2014-01-10 3 views
1

У меня есть проект WCF, и я генерирую базу данных с помощью инфраструктуры Entity v6 и кода. Но у меня есть проблема с отношением между классом User и FeedRss. Я хочу несколько FeedRss для каждого пользователя. Моя работа с кодом (без исключения), но не добавляется в фиды ICollection (у пользователя), этот список пуст после восстановления в базе данных.Entity Framework Code First: отношение «один ко многим» (пустой список)

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

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

один user-> много 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

Сделано, я не знал, включил. I rtfm ^^ – poupou

ответ

3

Вы можете либо каналы нагрузки с заявкой Include(...) в виде предложения CodeNotFound или вы можете сделать виртуальную фотографию feeds, что позволит ленивую загрузку, а EF автоматически загрузит фиды автоматически.

public class User { 
    ... 

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

Вы можете найти хорошую статью об отложенной загрузке и ревностных нагрузках на MSDN portal

+1

Dang 'virtual'! Я все время забываю об этом! –

Смежные вопросы