2016-07-10 4 views
0

Я пытался заставить его работать, но я не знаю, чего здесь не хватает.Entity Framework - загрузка определенных данных внешнего ключа

Мои модели:

public class User 
{ 
    public int id { get; set; } 
    public string username { get; set; } 

    public virtual List<UserMeta> usermeta { get; set; } 

    public User() 
    { 
     this.usermeta = new List<UserMeta>(); 
    } 

} 

public class UserMeta 
{ 
    public int id { get; set; } 
    public string metakey { get; set; } 
    public string value { get; set; } 

    public virtual User user { get; set; } 
} 

Я хочу, чтобы выбрать metavalue для metakey = 'first_name'

В настоящее время это то, что я и его работы:

var user = db.Users.Include("UserMeta"); 

foreach (var item in user) 
{ 
    Console.WriteLine(item.username); 

    foreach (var item2 in item.usermeta) 
    { 
     // check item2.metakey for 'first_name' 
    } 
} 

Но он выиграл Работает следующим образом:

var user = from u in db.Users 
      select u; 

foreach (var item in user) 
{ 
    foreach (var item2 in item.usermeta) 
    { 
    }   
} 

Что не так во втором фрагменте кода. Также есть лучший способ загрузить их?

+0

Просьба пояснить, что вы подразумеваете под «обычной работой». Получение ошибки? Неверные данные? Прочитайте [Как создать минимальный, полный и проверяемый пример] (http://stackoverflow.com/help/mcve). Я подозреваю, что вы пытаетесь получить доступ к «Пользователи» после того, как «DbContext» был удален, но с информацией, которую вы включили, невозможно сообщить. – Tone

ответ

0

Во втором фрагменте кода вы не включаете таблицу UserMeta.

Попробуйте это:

var user = (from u in db.Users select u).Include("UserMeta"); 
0

Я проверить этот код в консольном приложении с EF 6.1.3 и не проблемой (Маловероятно, что версия эф проблема), пожалуйста, проверить этот код или сравнить с вашим код (ваш код является неполным).

class Program 
{ 
    static void Main(string[] args) 
    { 
     using (var db = new ApplicationContext()) 
     { 
      var user = from u in db.Users select u; 

      foreach (var item in user) 
      { 
       foreach (var item2 in item.usermeta) 
       { 
        Console.WriteLine(string.Format($"{item2.metakey}:{item2.value}")); 
       } 
      } 
     } 

     Console.ReadKey(); 
    } 
} 
Смежные вопросы