How do you update your Cart in your repository? Are you explicitly calling CreateAndFlush() or SaveAndFlush()?
Where do you flush? How does your SaveCart() look like in your implementation of IEcoRepository? On 29 okt 2008, at 14.26, [EMAIL PROTECTED] wrote: > > 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 -~----------~----~----~----~------~----~------~--~---
