Actually .. I didn't fix it. I should have run all the tests before posting.
When doing Inverse=true the relationship is never created in the first place ... so all the add-to-cart tests failed. On Oct 29, 9:12 am, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> wrote: > I fixed it! I just had to set Inverse=true. > > [HasMany(typeof(EcoShoppingCartItem), ColumnKey = "ShoppingCartId", > Table = "EcoShoppingCartItems", Lazy = true, Inverse=true, Cascade = > ManyRelationCascadeEnum.All)] > > I'm not exactly what inverse=true means but got the idea from this > linkhttp://www.hibernate.org/359.html(bottom of page) and it works. > > Now, it doesn't actually delete the shoppingcartitem from the > database, but it does disconnect it from the cart (sets shoppingcartid > = null). Not ideal in this situation but I can see why we wouldn't > want every thing removed from a collection to be deleted from the > database so I'm happy with it. > > Now I've gotta figure out what inverse=true means. > > On Oct 29, 9:00 am, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> wrote: > > > Here is the integration test I am using ... > > > [Test] > > public void CanDeleteItemsFromShoppingCartAndSave() > > { > > EcoShoppingCart cart; > > EcoShoppingCart cartFromDB; > > string uniqueId = Guid.NewGuid().ToString(); > > var ecoRepository = > > ObjectFactory.GetInstance<IEcoRepository>(); > > > var catalogRepository = > > ObjectFactory.GetInstance<ICatalogRepository>(); > > ItmItem item = catalogRepository.GetItem(48046); > > > using (new SessionScope()) > > { > > cart = ecoRepository.GetCart(uniqueId); > > > cart.AddItem(item); > > cart.AddItem(item); > > > ecoRepository.SaveCart(cart); > > } > > using (new SessionScope()) > > { > > cart = ecoRepository.GetCart(uniqueId); > > > cart.DeleteItem(item); > > > ecoRepository.SaveCart(cart); > > } > > > using (new SessionScope()) > > { > > cartFromDB = ecoRepository.GetCart(uniqueId); > > Assert.AreNotSame(cart, cartFromDB); > > Assert.AreEqual(cart.Items.Count, 0); > > } > > } > > > And here is the unit test: > > > [Test] > > public void CanDeleteItem() > > { > > var cart = new > > EcoShoppingCart(FakeEntityFactory.subscription, "12345"); > > cart.AddItem(FakeEntityFactory.item); > > cart.AddItem(FakeEntityFactory.item); > > > cart.DeleteItem(FakeEntityFactory.item); > > > Assert.AreEqual(cart.Items.Count, 0); > > } > > > Thanks so much for sticking thru this with me! > > > On Oct 29, 2:10 am, "Markus Zywitza" <[EMAIL PROTECTED]> wrote: > > > > Do you use SessionScope? Did you flush the scope or used another to check > > > the results? > > > > What happens if you refresh the Cart? Does the deleted item show up again > > > or > > > is it "just" not deleted from the database but not connected to the cart > > > anymore? > > > > -Markus > > > 2008/10/29 [EMAIL PROTECTED] <[EMAIL PROTECTED]> > > > > > just grabbed this from the codecampserver trunk ... > > > > > Add Sponsor > > > > > public virtual void AddSponsor(Sponsor sponsor) > > > > { > > > > _sponsors.Add(sponsor); > > > > } > > > > > Remove Sponsor > > > > > public virtual void RemoveSponsor(Sponsor sponsor) > > > > { > > > > _sponsors.Remove(sponsor); > > > > } > > > > > Unit Test > > > > > [Test] > > > > public void ShouldDeleteSponsor() > > > > { > > > > Conference conf = CreateConference("", ""); > > > > IConferenceRepository repository = new > > > > ConferenceRepository(_sessionBuilder); > > > > Sponsor sponsorToDelete = CreateSponsor("test"); > > > > Sponsor sponsorToKeep = CreateSponsor("test2"); > > > > conf.AddSponsor(sponsorToDelete); > > > > conf.AddSponsor(sponsorToKeep); > > > > repository.Save(conf); > > > > getSession().Dispose(); > > > > > using (ISession session = getSession()) > > > > { > > > > var confFromDb = > > > > session.Get<Conference>(conf.Id); > > > > > > > > confFromDb.RemoveSponsor(sponsorToDelete); > > > > repository.Save(confFromDb); > > > > } > > > > > using (ISession session = getSession()) > > > > { > > > > var confFromDb = > > > > session.Get<Conference>(conf.Id); > > > > var sponsors = new > > > > List<Sponsor>(confFromDb.GetSponsors()); > > > > > Assert.That(sponsors.Contains(sponsorToKeep), Is.True); > > > > > Assert.That(sponsors.Contains(sponsorToDelete), Is.False); > > > > } > > > > } > > > > > Shows you can do what I'm describing with NHibernate. Not sure why it > > > > isn't working with AR. > > > > > On Oct 28, 7:48 pm, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> wrote: > > > > > Just as some background, I do have ICartRepo and CartRepo (I've been > > > > > oversimplifying everything). The model classes handles the logic > > > > > (calculating prices, update quantity, delete item, emptycart, etc.) > > > > > and the repo saves things when I'm done. > > > > > > This is where it gets really confusing for me. IMHO the cart should > > > > > know what items it has and how to get rid of them (or change their > > > > > quantity, or add a new item). Then saving the cart (and its contents) > > > > > should be handled by the repository. When I want the cart back, get it > > > > > from the repository. The real work happens in the model, not the repo. > > > > > > I don't understand why we want to have the repository managing what it > > > > > is in the cart. Doesn't this go against what we've been trying to > > > > > accomplish (a model that lives outside its persistence)? > > > > > > On Oct 28, 7:01 pm, "Victor Kornov" <[EMAIL PROTECTED]> wrote: > > > > > > > btw, is there a reason for that other than AR/NH being incapable (or > > > > we) to > > > > > > do that simpler way (i.e. just detaching it from relevan aggregate > > > > root)? > > > > > > > On Wed, Oct 29, 2008 at 1:07 AM, Ken Egozi <[EMAIL PROTECTED]> > > > > > > wrote: > > > > > > > create ICartRepository in the domain layer and ARCartRepository in > > > > the > > > > > > >> persistance layer, > > > > > > > > I second that. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Castle Project Users" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/castle-project-users?hl=en -~----------~----~----~----~------~----~------~--~---
