I have the following base class for most of my entities:
public abstract class RevisableEntity<TCurrentEntity, TEntityRevision> :
Entity
where TCurrentEntity :
RevisableEntity<TCurrentEntity, TEntityRevision>,
ICurrentEntity<TCurrentEntity, TEntityRevision>
where TEntityRevision :
RevisableEntity<TCurrentEntity, TEntityRevision>,
IEntityRevision<TCurrentEntity, TEntityRevision>
{
}
I would like -- no, love! -- if it was able to map everything inside of
classes inheriting from RevisableEntity with one or more conventions. I've
tried to make an abstract base class that implements
'IAutoMappingOverride<RevisableEntity<TCurrentEntity, TEntityRevision>>'
but Fluent didn't like that much. Having maps that are abstract seems like
a completely unsupported scenario and Fluent throws instead of ignoring
the mappings. I would prefer ignoring, obviously.
Either way, I would need to have a specific, non-abstract, non-generic
version of the above mentioned override for all of my entities either way,
which is a pain. I'm now in even more pain because the code I would like
to have in the generic abstract mapping override, I've had to put into
what I've called 'RevisableEntityUtility.OverrideMapping()' which I'm
forced to invoke in all mapping overrides.
Since all of my revisable entities are double (one being 'current' and one
being 'revision'), this means that for every revisable entity I have in my
domain model, I need two maps. Oh the pain! I'm seeking a way to solve
this with one or more conventions, but have found none that will help me
in any way. Here's what's going on inside
'RevisableEntityUtility.OverrideMapping()':
mapping.IgnoreProperty(x => x.EntityId);
mapping.IgnoreProperty(x => x.RequestedRevision);
mapping.IgnoreProperty(x => x.IsCurrent);
mapping.ApplyFilter<LogicalDeleteFilter>();
What's even worse is that I can't have all the code I want inside the
utility, because that leads to what has to be a bug in Fluent. In the
'current' maps I want to have a list of all the revisions of the same
entity:
mapping.HasMany(x => x.Revisions)
.KeyColumn("CurrentId")
.OrderBy("GlobalRevisionNumberId");
And in the 'revision' maps I want to have a reference to the 'current' of
the same entity:
mapping.References(x => x.Current, "CurrentId");
If I try to map this inside the utility, for whatever reason, I get the
following error:
----> System.InvalidOperationException : Tried to add collection
'Revisions' when already added.
----> System.InvalidOperationException : Tried to add reference
'Current' when already added.
If I move the .HasMany and .References call up from the utility to the
individual maps, it works. I have absolutely no idea why this isn't
working. Either way I would like to just get rid of all of my maps and do
all of this with conventions. Do I have any hope of achieving this with
Fluent? Can someone please point me in the right direction?
--
Asbjørn Ulsberg -=|=- asbj...@ulsberg.no
«He's a loathsome offensive brute, yet I can't look away»
--
You received this message because you are subscribed to the Google Groups "Fluent
NHibernate" group.
To post to this group, send email to fluent-nhibern...@googlegroups.com.
To unsubscribe from this group, send email to
fluent-nhibernate+unsubscr...@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/fluent-nhibernate?hl=en.