/// <summary> /// Sync the Changes to this Collection to the Database /// </summary> public void SaveChanges(DbAccessLayer layer) { var bulk = layer.Database.CreateCommand(""); var removed = new List <T>(); foreach (var pair in _internalCollection) { IDbCommand tempCommand; switch (pair.Value) { case CollectionStates.Added: tempCommand = layer.CreateInsertWithSelectCommand(typeof(T), pair.Key); break; case CollectionStates.Removed: tempCommand = DbAccessLayer.CreateDelete(layer.Database, layer.GetClassInfo(typeof(T)), pair.Key); removed.Add(pair.Key); break; case CollectionStates.Unchanged: tempCommand = null; break; case CollectionStates.Changed: tempCommand = layer.CreateUpdate(pair.Key, layer.Database); break; default: throw new ArgumentOutOfRangeException(); } if (tempCommand != null) { bulk = layer.Database.MergeCommands(bulk, tempCommand, true); } } var results = layer.ExecuteMARS(bulk, typeof(T)).SelectMany(s => s).Cast <T>().ToArray(); //Added var added = _internalCollection.Where(s => s.Value == CollectionStates.Added).ToArray(); for (var i = 0; i < added.Length; i++) { var addedOne = added[i]; var newId = results[i]; DataConverterExtensions.CopyPropertys(addedOne.Value, newId, layer.Config); } //Removed foreach (var item in removed) { _internalCollection.Remove(item); } foreach (var collectionStatese in _internalCollection.Keys.ToArray()) { ChangeState(collectionStatese, CollectionStates.Unchanged); } }
public DeleteQuery <T> Delete <T>() { return(new DeleteQuery <T>(this .QueryCommand( DbAccessLayer .CreateDelete(ContainerObject .AccessLayer.Database, ContainerObject.AccessLayer.GetClassInfo(typeof(T)))))); }