LINQ 2 SQL 不插入具有关系的实体

LINQ 2 SQL doensn't insert entity with relationship

首先总结一下我们之前的内容和我们所做的更改:在我们的项目中,我们有多个具有多个 DataContext 的项目。上周我们将所有这些 DataContext 合并到一个 DataContext 中:这是因为我们现在拥有所有关系,而不是随机 DataContext 中的所有关系。

进展顺利,直到我们碰壁:我们有一个 table Entities 和一个 table Articles。首先我们有以下代码:

var article = new Article();
article.Entity = new Entity();
context.InsertOnSubmit(article);

我们在关系 Article <> Entity 上收到冲突,因此我们尝试了以下操作:

var entity = new Entity();
context.InsertOnSubmit(entity);

var article = new Article();
context.InsertOnSubmit(article);

这也给出了同样的错误。我们启用 context.Log 来检查已执行的查询。每当我们尝试插入实体时,都会执行 SELECT 查询。所以我们尝试将 ConflictMode 设置为 FailOnFirstConflict,它没有抛出任何东西并且 SELECT 仍然被执行。

我们制作了自己的 INSERT,它将在以下位置附加实体:

var entity = new Entity();
CustomInsert(entity);
context.Attach(entity, false);

var article = new Article();
context.InsertOnSubmit(article);

这没有用,因为它在抱怨触发器。我们禁用了触发器:它起作用了!所以在我们看来,我们认为扳机可能也破坏了 L2S 插件;所以我们还原了所有内容并尝试在没有触发器的情况下使用 LINQ 2 SQL 插入实体:仍然是 SELECT 而不是 INSERT,所以它失败了。

我们还尝试了什么:

现在的问题是:这里可能是什么问题?有没有其他人遇到过这个错误,你有没有修复它?

发现问题。问题是 DataContext 中的 Insert。当您覆盖此方法时,LINQ 2 SQL 期望您手动插入实体,而不是自己插入实体。