Я решил это сам.
Поскольку невозможно получить доступ к любой конфигурации в ClassMap (и я не хотел начинать читать файлы конфигурации вручную там), и поскольку у вас не может быть зависимостей, введенных в ClassMap через некоторую среду IoC (Classmaps необходимо конструктор без параметров), я должен был сделать его "старинку" с одноплодным классом:
Одноэлементные:
общественного класс DefaultSchemaProvider { частными статический DefaultSchemaProvider _instance = NULL; приватная строка _defaultSchema = null;
public static DefaultSchemaProvider Instance
{
get
{
if (_instance == null)
_instance = new DefaultSchemaProvider();
return _instance;
}
}
public void SetDefaultSchema(string defaultSchema)
{
_defaultSchema = defaultSchema;
}
public string GetDefaultSchema()
{
return _defaultSchema;
}
}
В процессе конфигурирования:
var nhibernateCfg = new NHibernate.Cfg.Configuration();
nhibernateCfg.Configure(ConfigurationFile);
DefaultSchemaProvider.Instance.SetDefaultSchema(nhibernateCfg.GetProperty("default_schema"));
в classmap:
public class CustomerMap : ClassMap<Customer>
{
public CustomerMap()
{
var defaultSchema = DefaultSchemaProvider.Instance.GetDefaultSchema() + ".";
Table("Customers");
Id(x => x.Id).Column("Customer_id");
Map(x => x.Description).Column("Name");
Component(c => c.CustomerType, c =>
{
c.Map(x => x.Id).Column("Customer_type");
c.Map(x => x.Description).Formula(
"(SELECT ct.value FROM " + defaultSchema + "customer_types ct WHERE ct.field='description' AND ct.typeid = Customer_type)");
});
HasMany(x => x.ArticleLinks).KeyColumn("VENR").Access.CamelCaseField(Prefix.Underscore);
}
}
в случае, если кто приходит сюда, можно иметь classmaps с constructorparameters. 'var model = new PersistenceModel(); model.Add (новый MyClassMap (someparameter)); Свободно ... Отображения (m => m.UsePersistenceModel (model) ...) ' – Firo