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
link http://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