1

我在使用 Linq 更新我的数据库到实体时遇到问题。

我有 2 个实体:消息和作者 我的应用程序检查 Web 服务并从服务中提取消息和作者。

我的数据库中可能已经存在消息和作者,因此我检查重复项。

这对作者很有效。添加新作者,更新现有作者。

但是,这些消息给了我一个奇怪的问题。一条消息与作者有明显的关系,所以我通过调用 Message.Author = Author; 将作者添加到我的消息中。其中作者是我上一步中的新作者或更新作者。

显然,一旦我这样做,稍后在我的代码调用中提交更改,实体框架/linq 决定将此新消息添加到数据库,即使我没有对提及对象进行任何调用。它可能是因为与它相关的作者。

谁能给我一个正确的伪代码方法或使用 Linq 插入/更新作者和消息到实体的东西?

4

1 回答 1

1

EF 总是处理对象图中的所有实体。如果您已Author附加到 EF 上下文并将该作者实例分配给分离的Message实例,则 EF 会将其检测为对象图中的新实体。您必须通过更改其状态告诉 EF 该实体不是新实体而是存在的。

if (IsNewAuthor(author)) {
   context.Add(author); 
} else {
   context.Attach(author);
   context.ObjectStateManager.ChangeObjectState(author, EntityState.Modified);
}

message.Author = author;
context.ObjectStateManager.ChangeObjectState(message, EntityState.Unchanged);
context.SaveChanges();
于 2012-06-18T11:14:49.527 回答