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; } 
} 

私はmetakeyな= 'first_nameの' のmetavalueを選択したい

現在、これは私が持っているものであり、その作業:

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) 
    { 
    }   
} 

2番目のコードスニペットで何が間違っていますか。また、これらをロードするより良い方法がありますか?

+0

"作業しない"という意味を明確にしてください。エラーが発生しましたか?データが間違っていますか? [最小限で完全で検証可能なサンプルの作成方法](http://stackoverflow.com/help/mcve)を参照してください。 'DbContext'が破棄された後に' Users'にアクセスしようとしていると思われますが、あなたが含まれている情報ではそれを伝えることはできません。 – Tone

答えて

0

2番目のコードスニペットでは、UserMetaテーブルを含めません。

これを試してみてください:

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

私はEF 6.1.3と何の問題もなくコンソールアプリケーションでこのコードをテストする(EFのバージョンが問題であることはほとんどありません)、このコードをテストしたりして比較してみてくださいコード(あなたのコードは不完全です)。

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(); 
    } 
} 
関連する問題