1

我已经为此奋斗了一段时间。我正在尝试实现多对一关联。我在一张表中有一堆行,称为读数。这些随着时间的推移而积累,我时不时地想导出它们。当我导出它们时,我想创建一个名为 ExportEvent 的新对象,以跟踪导出了哪些行,以便在需要时重新导出它们。因此 Reading 与 ExportEvent 具有可为空的外键关系,因为我在导出读数之前创建读数。

我发现,当我进行导出时,是否首先创建 ExportEvent (evt) 并使用

evt.Readings.AddRange(), 

或者如果我使用

foreach(reading) 
reading.ExportEvent = evt

当我调用 SubmitChanges 时,我总是得到一堆新的与 evt 关联创建的读数,并且原始记录没有更新。

我把它简化为最简单的,只是想看看我是否可以创建没有关联的两个对象,我什至发现当我刚刚检索所有读数并更新它们的 int 值时,submitchanges 仍然插入了一堆新记录. 这是怎么回事?

4

2 回答 2

3

嗯。有意思——刚刚在我的书签里点了这个链接,发现问题又复活了,所以会提供(尴尬的)解决方案。我的所有实体都具有审核数据属性 - CreatedDate 和 UpdatedDate。因此,我实现了数据上下文中每个实体的插入和更新的部分方法。我已经为新创建的实体复制并粘贴了一些插入和更新方法(这是导致失败的原因的频率)。结果,我还复制了一个错误,其中 Update[blah] 方法调用的是 ExecuteDynamicInsert,而不是 ExecuteDynamicUpdate。

可以说我非常沮丧,因为 3 个小时我一直在疯狂地尝试解决这个问题,却发现它是由于一个(愚蠢的)复制/粘贴错误造成的 - 并且在我大约 3 分钟后才发现错误d发布了这个问题!

希望这可以帮助某人。

于 2009-11-25T00:01:12.130 回答
0

我怀疑这是因为你在打电话AddRange()。这会将新对象添加到数据上下文中。Attach()相反,您应该尝试通过调用数据上下文重新附加现有对象。

(或者,如果您从未分离它们并且仍然拥有原始数据上下文,则无需执行任何操作,只需对对象进行更改并调用SubmitChanges()

于 2009-11-18T10:53:10.590 回答