我正在开展一个项目,这让我感到困惑。我有2张桌子,电影(电影)和演员(atores)和一部电影有很多演员,反之亦然,演员有很多电影。
我将每个表声明如下:
电影(电影):
[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; }
现在,我正在用一些值初始化数据库。电影表有这个:
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()
}
};
所以,我正在做的应该是创建一个HarryPotter电影并添加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.Entity.dll中发生了'System.Data.EntityCommandExecutionException'类型的第一次机会异常
我找不到有关导致它的原因的更多信息。我访问错了吗?为什么它适用于演员,但是电影崩溃了?我感觉很迷茫!
答案 0 :(得分:0)
“如何在没有重复的情况下将电影添加到我的电影演员和演员?”
我做的就像SQL,另一个有MovieID和ActorID的表。我忽略了虚拟IColletions并且只是指向那些ID。
-
使用这种新方法,迭代值会变得更加容易,但是在我的Iqueriable中选择值以返回到我的ASPX页面时仍然遇到一些麻烦。我发现的简单方法就是将每个IQueriable转换为一个列表(使用.toList())并从那里开始工作。像魅力一样工作!