Linq to sql LINQ to SQL-检索对象、修改、提交更改()创建新对象

Linq to sql LINQ to SQL-检索对象、修改、提交更改()创建新对象,linq-to-sql,insert,many-to-one,submitchanges,Linq To Sql,Insert,Many To One,Submitchanges,我已经为此奋斗了一段时间。我正在尝试实现多对一关联。我在一张表中有一大堆行,叫做读数。这些东西会随着时间的推移而积累,我时不时地想把它们出口出去。导出这些行时,我希望创建一个名为ExportEvent的新对象,以跟踪导出的行,以便在需要时可以重新导出这些行。因此,当我在导出读数之前创建读数时,读数与ExportEvent具有可为空的外键关系 我发现,当我进行导出时,无论我是否首先创建ExportEvent(evt)并使用 evt.Readings.AddRange(), 或者如果我使用 fo

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

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

evt.Readings.AddRange(), 
或者如果我使用

foreach(reading) 
reading.ExportEvent = evt
当我调用SubmitChanges时,我总是得到一组与evt关联的新读数,并且原始记录不会更新


我将其简化为最简单的方式,只是为了看看是否可以创建两个没有关联的对象,我甚至发现,当我检索所有读数并更新其int值时,submitchanges仍然插入了一组新记录。发生了什么事?

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


(或者,如果您从未分离它们,并且仍然保留原始数据上下文,您不需要做任何事情,只需对对象进行更改并调用
SubmitChanges()

Hmmm。有趣的是,只需单击我书签中的此链接,发现问题已重新出现,因此将提供(令人尴尬的)解决方案。我的所有实体上都有审计数据属性——CreatedDate和UpdateDate。因此,我实现了在datacontext中插入和更新每个实体的分部方法。我已经为新创建的实体复制和粘贴了一些插入和更新方法(这是导致崩溃的原因有多频繁)。因此,我还复制了一个错误,其中Update[blah]方法调用的是ExecuteDynamicInsert,而不是ExecuteDynamicUpdate

我只想说,当我疯狂地试图解决这个问题3个小时后,我非常沮丧,结果发现它是由于一个(愚蠢的)复制/粘贴错误造成的——并且在我发布这个问题3分钟后才发现错误


希望这对某人有所帮助。

我已将问题退回。我认为这是一个非常好的问题,一个好的答案可以帮助其他刚刚开始使用Linq的人。