如何在linq中删除和重新插入实体?

时间:2011-02-21 23:24:38

标签: linq linq-to-sql insert submit

删除后,我在linq中插入实体时遇到了麻烦(没有提交更改)。

List<AlergiesPerPersonBE> AlergiesPerPerson = AlergiesPerPersonToInsert;

RepositoryFactory.GetAlergiesPerPersonRepository().DeleteWhere(x => x.PersonId == id);
RepositoryFactory.GetAlergiesPerPersonRepository().Insert(AlergiesPerPerson);

DataContextFactory.SubmitChanges();

两者(删除和插入)都不提交任何更改。它们只是InsertAllOnSubmit和DeleteAllOnSumbit。

代码第一次运行正常。所有细节都正确插入。第二次运行相同的代码时,db的所有行都被删除。第三次,一切正常。它有效,然后没有,依此类推。

3 个答案:

答案 0 :(得分:2)

我认为你必须重新制作细节。 即使尚未调用保存更改,上下文也会将此项跟踪为“已删除”。

答案 1 :(得分:2)

尝试

...DeleteWhere(x => x.PersonId == id); 
DataContextFactory.SubmitChanges();

...Insert(AlergiesPerPerson);
DataContextFactory.SubmitChanges();

您无需每个工作单元仅提交一次更改。请注意,这仍适用于您拥有的任何交易。

答案 2 :(得分:0)

周围有肮脏的工作。由于您想要摆脱DataContext观察者,您需要:

  1. 将对象或图形序列化为内存 流。
  2. 然后将其反序列化为新实例
  3. 将ID更改为0
  4. 将新对象附加到DataContext并提交 变化。
  5. 删除上一个
  6. 您可以将其移至CloneHelper静态类,以便将其用于任何类型