Отображения компилируются при запуске приложения, и как только это произойдет, их нельзя изменить.
Если ваши плагины используют разные таблицы, то по определению они не являются одинаковыми сущностями (и, следовательно, одинаковыми отображениями). Если все ваши плагины определяют разные таблицы, которые имеют одинаковую структуру, вам нужны отдельные сопоставления, но вы можете абстрагировать фактические определения.
Возможно, что-то вроде этого: каждый плагин определяет свое собственное отображение для этой таблицы, которое происходит от абстрактного класса, содержащего фактические отображения, кроме имени таблицы.
public abstract class PluginMap<T> : ClassMap<T> where T : IPlugin
{
public PluginMap()
{
Id(d => d.Id).GeneratedBy.Identity();
Map(d => d.Value);
}
}
public class PluginOneMap : PluginMap<PluginOne>
{
public PluginOneMap()
{
Table("PluginOne");
}
}
public class PluginTwoMap : PluginMap<PluginTwo>
{
public PluginTwoMap()
{
Table("PluginTwo");
}
}
В качестве альтернативы, вы можете определить их как подклассы в иерархии таблица-на-подкласс или таблица-на-наследование.