private async Task <IEnumerable <T> > CanDeleteBillingBase <T>(EntityManager em, String typeName, String expandPropName = null) where T : IEntity { // // Registering resource names for each derived type // // because these resource names are not in metadata // // because there are no corresponding DbSets in the DbContext // // and that's how Breeze generates resource names MetadataStore.Instance.SetResourceName(typeName + "s", typeof(T)); var q0 = new EntityQuery <T>(typeName + "s").With(em).Take(1); if (expandPropName != null) { q0 = q0.Expand(expandPropName); } var r0 = await q0.Execute(); if (r0.Count() == 0) { Assert.Inconclusive("Please restart the server - inheritance data was deleted by prior tests"); } var targetEntity = r0.First(); var targetKey = targetEntity.EntityAspect.EntityKey; List <IEntity> dependentEntities = null; if (expandPropName != null) { var expandVal = (IEnumerable)targetEntity.EntityAspect.GetValue(expandPropName); dependentEntities = expandVal.Cast <IEntity>().ToList(); dependentEntities.ForEach(de => de.EntityAspect.Delete()); } targetEntity.EntityAspect.Delete(); var sr0 = await em.SaveChanges(); var deletedEntities = sr0.Entities; Assert.IsTrue(deletedEntities.Contains(targetEntity), "should contain target"); if (expandPropName != null) { Assert.IsTrue(deletedEntities.Count == dependentEntities.Count + 1); } Assert.IsTrue(deletedEntities.All(de => de.EntityAspect.EntityState.IsDetached()), "should all be detached"); // try to refetch deleted var r1 = await em.ExecuteQuery(targetKey.ToQuery <T>()); Assert.IsTrue(r1.Count() == 0, "should not be able to find entity after delete"); return(r1); }