0

我正在浏览一篇文章和撰写文章的记者的 XML 文件。当我们将文章添加到 _Data 我们的数据上下文中时,我们可能会遇到需要添加的记者,所以我们这样做:

newJourno = New journalist With {.name = strJournalist}
_Data.journalists.InsertOnSubmit(newJourno)
.articles_journalists.Add(New articles_journalist With {.id_journalist = newJourno.id,         .id_article = .id})

然而,随后我们可能会再次遇到同一个记者,但当我们这样做时没有返回任何内容:

Dim journo = _Data.journalists.Where(Function(s) s.name = strJournalist).SingleOrDefault

所以它再次使用上面的代码再次插入同一个记者。

一旦我们所有的插入完成,我们就会做一个提交更改。在这一点上,它有一个头部适合:

INSERT 语句与 COLUMN FOREIGN KEY 约束“FK_articles_journalists_journalists”冲突。冲突发生在数据库'blah'、表'journalists'、列'id'中。该语句已终止。

通过查看 sql profiler 中生成的 sql,您可以看到它多次尝试添加一些记者,这将失败,因为名称必须不同。由于未更新该记者,随后试图插入这些记者的记录失败。

当然,如果我有一个记者收藏,添加一些,然后查看我的收藏,我应该看到所有这些,而不仅仅是原始的。我猜我可以通过提交更改来捏造它,但这似乎有点愚蠢。

提前致谢,

戴夫。

4

3 回答 3

2

如果要向数据库添加两个子父行,则必须分配实体,而不是 Id 列,Id 将自动生成,并且仅在提交更改后才可用。

你必须做一个articles_journalist对象,然后将 newJourno 实体分配给这个:

articles_journalist.journalist = newJourno;
于 2009-03-18T15:00:44.347 回答
0

CMS 关于需要分配对象而不是 id 是正确的。

然而,这似乎并没有解决 datacontext 的问题,在您提交更改之前没有意识到它已经添加了新内容。我只能假设这是设计使然,因此我现在在代码插入我们稍后搜索的对象时调用 submitchanges。

于 2009-03-19T13:13:23.847 回答
0

“名称必须不同。”

这是一个严重的设计缺陷。人名从来都不是唯一的。

于 2009-03-19T13:19:54.783 回答