Click here to Skip to main content
15,895,256 members
Articles / NHibernate

Object Relational Mapping (ORM) using NHibernate - Part 7 of 8 Completing the Ecommerce Example

Rate me:
Please Sign up or sign in to vote.
5.00/5 (7 votes)
15 May 2013CPOL7 min read 28.1K   2.6K   17  
A full series of 8 part articles to show One-To-One, Many-To-One, Many-To-Many associations mapping using NHibernate, Using Collections With NHibernate, Inheritance Relationships Using NHibernate, Lazy Initializations/Fetches Using NHibernate.
using System;
using Iesi.Collections.Generic;

namespace ECommerceSystem.Domain
{
    public class PaymentApprovedOrder
    {
        public PaymentApprovedOrder()
        {
            PaidOrderItems = new HashedSet<Item>();
        }
        public PaymentApprovedOrder(Order order,Payment pay)
        {
            PaidOrderItems = new HashedSet<Item>();
            CurrentOrder = order;

            // SET ONE END OF ASSOCIATION

            OrderPayment = pay;

            // SET OTHER END OF ASSOCIATION

            pay.PaidOrder = this;  

            foreach (Item item in order.OrderItems)
            {
                //ORDER ITEMS FLAGGED HERE TO SHOW PAYMENT IS COMPLETE
                //UPDATES TO DB AUTOGENERATED BY Nhibernate
                if (item.IsOrdered == false)
                    item.IsOrdered = true;

                //SET THE ORDER ITEMS 
                // THE ORDER USED IN PAYMENTAPPROVEDORDER HERE
                //CONTAINS ORDERITEMS
                AddPaidItem(item);
            }
            // Set the Customer BIDEIRECTIONAL ASSOCIATION
            order.OrderedByCustomer.AddPaidOrder(this);
        }

        public virtual long PaymentApprovedOrderId { get; set; }

        public virtual Order CurrentOrder { get; set; }

        // NOTE: BIDIRECTIONAL ASSOCIATION WITH "PAYMENT"

        public virtual Payment OrderPayment { get; set; }

        //NOTE: BIDIRECTIONAL ONE-TO-MANY ASSOCIATION WITH ITEM

        public virtual ISet<Item> PaidOrderItems { get; set; }

        //NOTE: BIDIRECTIONAL MANY-TO-ONE ASSOCIATION WITH CUSTOMER

        public virtual Customer PaidByCustomer { get; set;}

        public virtual void AddPaidItem(Item item)
        {
            //SET THE REFERENCE FOR PAYMENTAPPROVEDORDER
            //IN ITEM OBJECT TO THIS (THE PAYMENT APPROVED
            //ORDER INSTANCE TO WHICH THE item IS ADDED")

            // THIS IS FIRST END OF THE
            // ONE-TO-MANY ASSOCIATION - THE "ONE" END

            item.PaidOrder = this;

            //ADD "item" TO THE SET PaidOrderItems
            //OTHER END OF ASSOCIATION - THE "MANY" END

            PaidOrderItems.Add(item);
            
        }

    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
India India
Software Developer developing in c#.net.

Comments and Discussions