我正在为SQL Server数据库创建同步系统。
public void UpdateTable<T>(List<T> current, List<T> changed) where T : class
{
var deletedRecords = current.Except(changed);
foreach (T entity in deletedRecords)
{
_context.GetTable<T>().DeleteOnSubmit(entity);
}
_context.SubmitChanges();
}
但在DeleteOnSubmit
操作中,它失败并显示InvalidOperationException: Unable to remove an embedded object.
数据库的设计采用CASCADE
删除操作。怎么了?谢谢!
答案 0 :(得分:1)
你看过this发帖吗?在此示例中,它创建了一个通用接口,其类型为T,继承自类。此接口公开方法删除(T项),它执行类似于您所做的操作。问题可能是您需要为每个对象执行 db.SubmitChanges(),但我不确定。因此,我建议为 deletedRecords 列表中的每个对象调用此方法。希望它有所帮助!
// Deletes the data values in the LINQ to SQL generated class.
public virtual bool Delete(T Item)
{
using (TestDBContext db = new TestDBContext())
{
db.GetTable<T>().DeleteOnSubmit(Item);
db.SubmitChanges();
return true;
}
}