我有以下两个类。 当我保存A中有多个项目(B)时,我得到了预期的结果。 但是当我保存对A的更改时,例如空的项目列表(B),我希望表B中的所有元素都会自动被删除,因为它们没有在任何地方引用(单独查询它们并不是有意的)。 而是在表中将每个项的外键(IDofA)设置为Null。 在我的情况下,这导致无休止增长的表(B),因为A的一些对象永远不会被删除,只是更新。
public class A
{
public string Name{ get; set; }
[OneToMany(CascadeOperations = CascadeOperation.All)]
public List<B> Items { get; set; }
}
public class B
{
[ForeignKey(typeof(A))]
public string IDofA { get; set; }
}
//This is the Generic Save Method that I use for all the Objects
public virtual void Save(T element)
{
CreateID(element);
if (!RuntimeCache.Any(x => x.ID == element.ID))
{
RuntimeCache.Add(element);
}
element.UpdateChangeDate();
RunDBQueryAsync((conn) =>
{
conn.InsertOrReplaceWithChildren(element);
});
}
答案 0 :(得分:0)
更新元素永远不会导致按设计删除子对象。仅仅通过更新另一个对表执行破坏性操作不是一个好主意。只需删除不再引用的元素,就可以解决无限增长的表问题:
public virtual void Save(T element)
{
CreateID(element);
if (!RuntimeCache.Any(x => x.ID == element.ID))
{
RuntimeCache.Add(element);
}
element.UpdateChangeDate();
RunDBQueryAsync((conn) =>
{
conn.InsertOrReplaceWithChildren(element);
// Delete orphaned children
conn.Execute("DELETE FROM B WHERE IDofA IS NULL');
});
}