EcoRepo looks like this ...

        public void SaveCart(EcoShoppingCart cart)
        {
            shoppingCartRepository.Save(cart);
        }

shoppingCartRepo is an IRepo<EcoShoppingCart>

Repo<ShoppingCart> looks like this:

        public T Save(T entity)
        {
            // Success = false by default
            entity.Success = false;

            // Crazy Resharper converted if statement
            // If record.Id = 0 Insert, else, Update
            entity.SuccessMsg = entity.Id == 0 ? entity.InsertSuccessMsg :
entity.UpdateSuccessMsg;

            // Always update DateModified
            entity.DateModified = DateTime.Now;

            if (entity.IsValid())
            {
                ActiveRecordMediator<T>.Save(entity);
                entity.Success = true;
            }

            return entity;
        }


On Wed, Oct 29, 2008 at 4:28 PM, Jimmy Shimizu <[EMAIL PROTECTED]>wrote:

>
> 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<http://www.hibernate.org/359.html%28bottom>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