我正在开发一个项目,这只是让我困惑不已。我有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/)”,其中的共识是“不,他们不应该”。 –