2012-04-12 90 views
0

我有两个元素Sfera和Contenuti之间的N-N关系。如何处理实体框架.NET 3.5中的N-N关系

在特别基金项目我看到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 }; 
      } 

如果我看看我的数据库,它会很好地存储我在右边的“NN”表中的两个元素之间的关系....但是当我尝试访问元素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永远是真的,或者对于至少一条记录是真的吗?另外,您确定IDSfera的值是否等于至少一条记录中的PK_Sfera的值?而且这两个条件在至少一个记录中都是正确的? – 2012-04-12 15:17:38

+0

是的,我敢肯定...你可以在代码中看到,如果sfere为空(所以没有与Attiva == true匹配的结果,ID等于我的参数),会引发异常并且其他代码无法访问! – 2012-04-12 15:22:21

+0

我看不到引发异常的代码。我们正在查看相同的代码吗? – 2012-04-12 15:32:42

回答

1

在您的查询中尝试使用Include()

var sfere = from sfera in DB.Sfera.Include("Contenuto") where sfera.PK_Sfera == IDSfera && sfera.Attiva select sfera;