有一个班级表,主键是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;
}
}