Ok, this is a bit complicated because I have a base class for all
domain objects and a base class for all mappings that maps the PK as a
Guid ID column:


public class DomainObject : IDomainObject
{
        public virtual Guid ID { get; protected set; }

        private bool isNew = true;
        public virtual bool IsNew { get { return this.isNew; } protected set
{ this.isNew = value; } }
        public virtual DateTime DateCreated { get; protected set; }
        public virtual DateTime DateUpdated { get; protected set; }

        public override bool Equals(object obj)
        {
                var persistentObject = obj as DomainObject;
                return (persistentObject != null) && (ID == 
persistentObject.ID);
        }

        protected  virtual void OnSave()
        {
                this.isNew = false;
        }
}

public abstract class MapBase<T> : ClassMap<T> where T:IDomainObject
{
        public MapBase()
        {
                Id(x => x.ID).GeneratedBy.GuidComb();
                Map(x => x.DateCreated);
                Map(x => x.DateUpdated);
                this.CreateMappings();
        }

        public abstract void CreateMappings();
}


public class UserAccount : DomainObject
{

        public virtual string FirstName { get; set; }
        public virtual string LastName { get; set; }
        public virtual string CompanyName { get; set; }
        public virtual string Email { get; set; }
        public virtual string Phone { get; set; }
        public virtual string AltPhone { get; set; }
        public virtual string Username { get; set; }
        public virtual string Password { get; set; }
        public virtual IDictionary<AddressType, Address> Addresses { get;
protected  set; }

        public virtual CreditCard CreditCard { get; set;}

        public virtual Address PrimaryAddress
        {
                get
                {
                        return this.Addresses[AddressType.Primary];
                }
                set
                {
                        this.Addresses[AddressType.Primary] = value;
                }
        }

        public virtual Address BillingAddress
        {
                get
                {
                        return this.Addresses[AddressType.Billing];
                }
                set
                {
                        this.Addresses[AddressType.Billing] = value;
                }
        }

        public override string ToString()
        {
                return FirstName + " " + LastName;
        }

        public virtual string FullName { get { return ToString(); } }

        public UserAccount()
        {

                this.CreditCard = new CreditCard();

                this.Addresses = new Dictionary<AddressType, Address>();

                if (this.Addresses != null) //here for nhibernate proxy
                {
                        var primary = new Address(AddressType.Primary);
                        var billing = new Address(AddressType.Billing);

                        this.Addresses.Add(AddressType.Primary, primary);
                        this.Addresses.Add(AddressType.Billing, billing);
                }

        }


}


public class CreditCard : DomainObject
{
        public virtual string NameOnCard { get; set; }
        public virtual string CardNumber { get; set; }
        public virtual string SecurityCode { get;  set; }
        public virtual DateTime ExpirationDate { get;  set; }
        public virtual CardType CardType { get;  set; }
}

public class CardType : DomainObject
{
        public virtual string Name { get; set; }
}



public class UserAccountMap : MapBase<UserAccount>
{

        public override void CreateMappings()
        {
                Map(x => x.FirstName);
                Map(x => x.LastName);
                Map(x => x.CompanyName);
                Map(x => x.AltPhone);
                Map(x => x.Phone);
                Map(x => x.Email);
                Map(x => x.Username);
                Map(x => x.Password);

                HasOne(x => x.CreditCard).Cascade.All();
                HasMany(x => x.Addresses).AsMap(x=>x.Type).Cascade.All();
        }
}

public class CreditCardMap : MapBase<CreditCard>
{
        public override void CreateMappings()
        {
                Map(x => x.CardNumber);
                Map(x => x.ExpirationDate);
                Map(x => x.NameOnCard);
                Map(x => x.SecurityCode);
                References(x => x.CardType).Cascade.SaveUpdate();
        }
}




--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Fluent NHibernate" 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/fluent-nhibernate?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to