2017-01-30 38 views
0

我有以下两个类。 当我将多个项目(B)保存在其中时,我会得到预期的结果。 但是,当我保存对A的更改时,比如空的List of Items(B),我希望表B中的所有元素都会自动被删除,因为它们在任何地方都没有被引用(分别查询它们并不是)。 而是表中的每个项目的外键(IDofA)都设置为Null。 在我的情况下,这导致无限增长的表(B),因为A的某些对象从不删除,只是更新。SQLite.Net扩展 - 删除更新中的子项

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

更新元素永远不会导致设计中删除子对象。通过更新另一个表来执行破坏性操作不是一个好主意。你无尽的成长表问题,只需通过删除不再被引用的元素来解决:

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'); 
    }); 
} 
+0

我一直希望有对于配置... 无论如何,感谢最简单的办法。 –