我正在開發一個項目,這只是讓我困惑不已。我有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
我無法找到有關導致它的更多信息。我訪問錯了嗎?它爲什麼對演員有效,但對電影崩潰?我感覺很迷茫!
我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –