【问题标题】:Object Oriented Database: N:M Relations面向对象的数据库:N:M 关系
【发布时间】:2013-10-12 18:42:55
【问题描述】:

我正在做一个项目,这让我很困惑。我有 2 张桌子,电影(电影)和演员(演员),一部电影有很多演员,反之亦然,演员有很多电影。

我将每个表声明如下:

电影(电影):

    [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()
            }
        };

所以,我正在做的应该是制作一部哈利波特电影并添加 2 个演员。拉德克利夫应该把哈利波特列入他的电影名单。

我发现的第一个问题是我的电影表中有 2 部哈利波特电影。我猜是因为我正在调用“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”类型的第一次机会异常

我找不到有关导致它的原因的更多信息。我访问有问题吗?为什么它对演员有效,但对电影却崩溃了?我感觉很失落!

【问题讨论】:

标签: c# database object


【解决方案1】:

“如何将电影添加到我的演员和演员到我的电影而不重复?”

我像 SQL 那样做,另一个包含 MovieID 和 ActorID 的表。我忽略了虚拟 IColletions,只是有指向这些 ID 的整数。

--

使用这种新方法,遍历值变得容易得多,但我仍然在将值选择到 Iqueriable 中以返回到我的 ASPX 页面时遇到了一些麻烦。我发现的简单方法是将每个 IQueriable 转换为列表(使用 .toList() )并从那里开始工作。像魅力一样工作!

【讨论】:

    猜你喜欢
    • 2010-10-19
    • 2011-03-23
    • 2014-08-05
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多