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,所以它失败了。
我们还尝试了什么:
- 删除选项中的
LoadWith
。
- 正在创建 DataContext 的新实例。
现在的问题是:这里可能是什么问题?有没有其他人遇到过这个错误,你有没有修复它?
发现问题。问题是 DataContext 中的 Insert
。当您覆盖此方法时,LINQ 2 SQL 期望您手动插入实体,而不是自己插入实体。
首先总结一下我们之前的内容和我们所做的更改:在我们的项目中,我们有多个具有多个 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,所以它失败了。
我们还尝试了什么:
- 删除选项中的
LoadWith
。 - 正在创建 DataContext 的新实例。
现在的问题是:这里可能是什么问题?有没有其他人遇到过这个错误,你有没有修复它?
发现问题。问题是 DataContext 中的 Insert
。当您覆盖此方法时,LINQ 2 SQL 期望您手动插入实体,而不是自己插入实体。