static void InsertValue(this SQLiteConnection conn, object value, bool replace, bool recursive, ISet <object> objectCache) { if (value == null) { return; } var enumerable = value as IEnumerable; if (recursive) { if (enumerable != null) { conn.InsertAllWithChildrenRecursive(enumerable, replace, recursive, objectCache); } else { conn.InsertWithChildrenRecursive(value, replace, recursive, objectCache); } } else { if (enumerable != null) { conn.InsertElements(enumerable, replace, objectCache); } else { conn.InsertElement(value, replace, objectCache); } } }
/// <summary> /// Inserts all the elements and all the relationships that are annotated with <c>CascadeOperation.CascadeInsert</c> /// into the database. If any element already exists in the database a 'Constraint' exception will be raised. /// Elements with a primary key that it's not <c>AutoIncrement</c> will need a valid identifier before calling /// this method. /// If the <c>recursive</c> flag is set to true, all the relationships annotated with /// <c>CascadeOperation.CascadeInsert</c> are inserted recursively in the database. This method will handle /// loops and inverse relationships correctly. <c>ReadOnly</c> properties will be omitted. /// </summary> /// <param name="conn">SQLite Net connection object</param> /// <param name="elements">Objects to be inserted.</param> /// <param name="recursive">If set to <c>true</c> all the insert-cascade properties will be inserted</param> public static void InsertAllWithChildren(this SQLiteConnection conn, IEnumerable elements, bool recursive = false) { conn.InsertAllWithChildrenRecursive(elements, false, recursive); }