Fluent, AutoMappings CompositeID

19 views
Skip to first unread message

Sandor Duis

unread,
Mar 28, 2012, 7:52:54 PM3/28/12
to nhu...@googlegroups.com
I've just spend 3 hours searching reading en trying to get this simple thing to work:

The Class (or Entity)
namespace EntryService.DAL.Domain
    [Serializable]
    public class ClientEntranceInfo 
    {
        public virtual ClientEntranceInfoKey Key { get; set; }
        public virtual int SportSchoolNumber
        {
            get { return Key.SportSchoolNumber; }
            set { Key.SportSchoolNumber = value; }
        }
        public virtual int PassNumber
        {
            get { return Key.PassNumber; }
            set { Key.PassNumber = value; }
        }
        public virtual int ClientNumber
        {
            get { return Key.ClientNumber; }
            set { Key.ClientNumber = value; }
        }
        
        public virtual DateTime EntranceTime { get; set; }
        
        public virtual DateTime UpdateDateTime { get; set; }

        public ClientEntranceInfo()
        {
            Key = new ClientEntranceInfoKey();
        }
    }

The ClientEntranceInfoKey 
namespace EntryService.DAL.CompositeKeys
     [Serializable]
    public class ClientEntranceInfoKey
    {
        public virtual int SportSchoolNumber { get; set; }
        public virtual int PassNumber { get; set; }
        public virtual int ClientNumber { get; set; }

        public ClientEntranceInfoKey()
        {
        }

        public ClientEntranceInfoKey(int sportSchoolNumber, int passNumber, int clientNumber)
        {
            SportSchoolNumber = sportSchoolNumber;
            PassNumber = passNumber;
            ClientNumber = clientNumber;
        }

        public override bool Equals(object obj)
        {
            if (ReferenceEquals(null, obj)) return false;
            if (ReferenceEquals(this, obj)) return true;
            if (obj.GetType() != typeof (ClientEntranceInfoKey)) return false;
            return Equals((ClientEntranceInfoKey) obj);
        }

        public bool Equals(ClientEntranceInfoKey other)
        {
            if (ReferenceEquals(null, other)) return false;
            if (ReferenceEquals(this, other)) return true;
            return other.SportSchoolNumber == SportSchoolNumber && other.PassNumber == PassNumber &&
                   other.ClientNumber == ClientNumber;
        }

        public override int GetHashCode()
        {
            unchecked
            {
                int result = SportSchoolNumber;
                result = (result*397) ^ PassNumber;
                result = (result*397) ^ ClientNumber;
                return result;
            }
        }
    }

The Database Table ClientEntranceInfo (MySQL)
SportSchoolNumber INT(11) PK NN
PassNumber INT(11) PK NN 
ClientNumber INT(11) PK NN
EntranceTime (DATETIME) NN

Very simple I would think.
So.....
var cfg = new MappingsConfiguration();
return Fluently.Configure()
   .Database(MySQLConfiguration.Standard.ConnectionString(ConnString))
   .Mappings(m => m.AutoMappings.Add(AutoMap.AssemblyOf<ClientEntranceInfo>(cfg)
        .Override<ClientEntranceInfo>(map => map.IgnoreProperty(cei => cei.UpdateDateTime))
        .Override<ClientEntranceInfo>(map => map.CompositeId().ComponentCompositeIdentifier
                <ClientEntranceInfoKey>(x => x.Key).KeyProperty(
                     x => x.SportSchoolNumber).KeyProperty(
                     x => x.ClientNumber).KeyProperty(
                     x => x.PassNumber))))
                    .BuildSessionFactory();
            }

With cfg = instance of 
public class MappingsConfiguration : DefaultAutomappingConfiguration
    {
        public override bool ShouldMap(Type type)
        {
            return type.Namespace == "EntryService.DAL.Domain";
        }
    }

gives me this exception:
An association from the table ClientEntranceInfo refers to an unmapped class: EntryService.DAL.CompositeKeys.ClientEntranceInfoKey

Is there somewhere a simple example about this???



Reply all
Reply to author
Forward
0 new messages