Option 1
you could write a method returning all Mappings which alters them depending on the caller and add the mappings manually to the context
public IEnumerable<IMappingProvider> GetAllMappings(MappingMode mode)
{
yield return new UserMap();
var fooMap = new FooMap();
if (mode == MappingMode.Reporting)
fooMap.ReadOnly();
yield return fooMap
}
var model = new PersistenceModel();
foreach (var mapping in GetAllMappings(mappingMode)
{
model.Add(mapping);
}
Fluently.Configure().Mappings(m => m.UsePeristenceModel(model))
Option 2
add custom conventions depending on the app which alter the mapping