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