2013-10-10 41 views
0

我正在開發一個項目,這只是讓我困惑不已。我有2張表,電影(電影)和演員(atores),一部電影有很多演員,反之亦然,演員有很多電影。面向對象的數據庫:N:M關係

我聲明的每個表如下:

電影(Filmes):

[ScaffoldColumn(false)] 
    public int id { get; set; } 

    public string NomeFilme { get; set; } 

    public virtual ICollection<Ator> atores { get; set; } 

演員(Atores):

[ScaffoldColumn(false)] 
    public int id { get; set; } 

    public string Nome { get; set; } 

    public virtual ICollection<Filme> filmes { get; set; } 

現在,我初始化DB一些值。該電影表有這樣的:

var filmes = new List<Filme> { 
      new Filme { 
       NomeFilme = "Harry Potter - Part II", 
      } 
     }; 

和演員表有:

var lista = new List<Ator> { 
      new Ator { 
       Nome = "Emma Watson" 
      }, 
      new Ator { 
       Nome = "Daniel Radcliffe", 
       filmes = GetMovies() 
      } 
     }; 

所以,我在做什麼,應建立一個哈利·波特電影,加入2個演員。雷德克里夫應該在他的電影列表中擁有哈利波特。

我發現的第一個問題是我在電影表中收到2個HarryPotter電影。我猜它是因爲我打電話「filmes = GetMovies()」,並且該函數再次創建電影。我想,也許我不得不使用DB ProductContext和類似

 context.Filmes.ElementAt(0) 

但我還是做一個「新目錄」,當我嘗試了,我得到了一個例外。所以,我的第一個問題是: 如何將我的演員和演員的電影添加到我的電影中而沒有重複? (我一定要做到像SQL並創建一個新的表?O.o)所有的


其次,在我的網頁的某個地方,我嘗試訪問這些值。即使有重複,我想是這樣的:

 IQueryable<Ator> temp = _db.Atores; 
     foreach (var t in temp) 
     { 
      System.Diagnostics.Debug.Write("actor:" + t.Nome); 

      foreach (var p in t.filmes) 
      { 
       System.Diagnostics.Debug.Write("OMFG IT WORKED " + p.NomeFilme); 
      } 
     } 

現在經過我打印演員的名字, 型「System.Data.EntityCommandExecutionException」的第一次機會異常出現在System.Data.Entity.dll

我無法找到有關導致它的更多信息。我訪問錯了嗎?它爲什麼對演員有效,但對電影崩潰?我感覺很迷茫!

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

回答

0

「我如何向我的演員和演員添加電影到我的電影沒有重複?」

我做了它像SQL,另一個表與MovieIDs和ActorIDs。我忽略了虛擬IColletions,只是指向這些ID的int。

-

有了這個新的方法,在整個價值迭代變得輕鬆了很多,但我還是遇到了一些麻煩選取數值到我Iqueriable回到我的ASPX頁面。最簡單的方法,我發現只是每IQueriable和工作轉換到一個列表(()與.toList)從那裏。奇蹟般有效!