我正在浏览文章的XML文件和编写它们的记者。当我们将文章添加到_Data我们的datacontext时,我们可能会遇到需要添加的记者,所以我们这样做:
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
所以它再次使用上面的代码再次插入同一个记者。
完成所有插入操作后,我们执行submitchanges。此时它有一个头部适合:
INSERT语句与COLUMN FOREIGN KEY约束'FK_articles_journalists_journalists'冲突。冲突发生在数据库'blah',表'记者',列'id'。声明已经终止。
通过查看sql profiler中生成的sql,你可以看到它试图多次添加一些记者,这将失败,因为名称必须是不同的。由于记者没有更新,因此试图与这些记者一起插入的后续记录失败。
当然,如果我有一些记者的集合,添加一些,然后查看我的收藏,我应该看到所有这些,而不仅仅是原始的。我可以通过做一个提交更改来捏造它,但这看起来有点傻。
提前致谢,
戴夫。
答案 0 :(得分:2)
如果要向数据库添加两个子父行,则必须分配实体而不是Id列,Id将自动生成,并且仅在提交更改后才可用。
你必须做一个articles_journalist
对象,然后将newJourno实体分配给它:
articles_journalist.journalist = newJourno;
答案 1 :(得分:0)
CMS对于需要分配对象而不是id是正确的。
然而,这似乎没有解决datacontext没有意识到它已经添加了新内容直到你提交更改的问题。我只能假设这是设计的,因此我现在在代码插入我们稍后搜索的对象时调用submitchanges。
答案 2 :(得分:0)
“名称必须与众不同。”
这是一个严重的设计缺陷。人名永远不是唯一的。