2012-04-12 19 views
0

2つの要素SferaとContenutiの間にN-N関係があります。Entity FrameworkでN-N関係を処理する方法.NET 3.5

私はContenutiエンティティ・セットを参照してくださいとContenutiに私はスフェラ・セットを参照してくださいスフェラ項目で

..

私はコードで新しい項目を追加すると私は同じような構造を使用します。

using (IndexDB DB = new IndexDB()) 
     { 
      try 
      { 
       var newContenuto = new Contenuto(); 
       newContenuto.Cancellato = false; 
       newContenuto.PK_Content_ID = tt_content_id; 
       newContenuto.URL = URL; 
       foreach(long sphere in SphereID) 
       { 
        try 
        { 
         var sfere = from sfera in DB.Sfera where sfera.PK_Sfera == sphere select sfera; 
         newContenuto.Sfera.Add(sfere.First()); 
         sfere.First().Contenuto.Add(newContenuto); 
        } 
        catch (Exception exc) 
        { 
         return new StandardResponse() {Success = false, Message = exc.Message}; 
        } 
       } 
       DB.AddToContenuto(newContenuto); 
       DB.SaveChanges(); 
       return new StandardResponse() {Success = true}; 
      } 
      catch (Exception e) 
      { 
       return new StandardResponse() { Success = false, Message = e.Message + e.StackTrace }; 
      } 

私のDBを見てみると、右側の "NN"テーブルの2つの要素の間の関係がうまく保存されています....しかし、Contenuto.SferaとSfera.Contenuto要素にアクセスしようとすると、常に空集合になります。

アクセスするには、次のようにしてください:

using (IndexDB DB = new IndexDB()) 
     { 
      var sfere = from sfera in DB.Sfera where sfera.PK_Sfera == IDSfera && sfera.Attiva select sfera; 

      if (!sfere.Any()) 
      { 
       response.Add(new UrlResponse() { Success = false, ErrorMessage = "" }); 
      } 
      var sferaSelezionata = sfere.First(); 
//HERE sferaSelezionata.Contenuto.Count == 0 even if on DB there are MANY "connections" 
} 

}

どのように私はこれを扱うことができますか?

ありがとうございました!

+0

sferra.Attivaは常にtrueですか、少なくとも1つのレコードでtrueですか?また、少なくとも1つのレコードでIDSferaの値がPK_Sferaの値と等しいことを確認してください。そして、これらの条件の両方が少なくとも1つのレコードに当てはまりますか? –

+0

はい私は確信しています...もしあなたがコードが空であれば、Attiva == trueとIDとが一致していて、IDが自分のパラメータと一致していないことがわかります)例外SHが発生し、他のコードに到達できません! –

+0

例外が発生するコードはありません。私たちは同じコードを見ていますか? –

答えて

1

Include()をお試しください。

var sfere = from sfera in DB.Sfera.Include("Contenuto") where sfera.PK_Sfera == IDSfera && sfera.Attiva select sfera; 
関連する問題