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
-~----------~----~----~----~------~----~------~--~---

Reply via email to