有一个班级表,主键是class_id,在管理班级时要进行逻辑删除,而只是单纯的is_del字段(记录每条数据是否有效)更改为true,主键class_id如果不变动,在再次增加一个班级时,其主键如果和某条逻辑删除的数据主键是相同的,那么将会操作失败,因为主键不能重复,所以需要更改逻辑删除的信息的主键值,例如在前面加个字符D,然而linq是不允许修改主键值的,为了防止并发操作引起的错误,所以要想是实现更改主键的功能,只能是先将此条信息复制出来,修改后再重新插入一条数据,然后再把原来的那条数据删除了,也就实现了修改主键的功能。
下面是我写的逻辑删除函数
public bool delete(string id) { Model.G_class temp = (from row in DB.G_class where row.class_id == id select row).First(); Model.G_class newRow = new Model.G_class();//重新创建一个对象
//不能直接让newRow = temp,然后再更改newRow,因为那样成了引用操作,而我们要做的是重新建立对象后进行复制操作 newRow.class_id = "D" + temp.class_id;//修改主键值 newRow.class_name = temp.class_name; newRow.class_max = temp.class_max; newRow.class_blog = temp.class_blog; newRow.class_memo = temp.class_memo; newRow.kindergarten_type = temp.kindergarten_type; newRow.is_del = true;//逻辑删除字段更改 try { Table<Model.G_class> table = DB.GetTable<Model.G_class>(); DB.G_class.DeleteOnSubmit(temp);//删除原来数据 table.InsertOnSubmit(newRow);//插入新的数据 DB.SubmitChanges(); return true; } catch { return false; } }