我注意到default_schema设置仅适用于生成 SQL。 用户提供的SQL(在我的例子中:通过Map()。Formula())似乎不受影响 通过default_schema设置。
这有什么办法吗? 我尝试阅读default_schema尝试了天真的方法 从映射类中的配置然后更改SQL 在.Formula()调用中包含default_schema,但是甚至 从映射文件访问配置似乎并不重要。
非常感谢任何帮助!
此致 LDX
答案 0 :(得分:0)
我自己解决了这个问题。
因为似乎无法访问ClassMap中的任何配置(我不想在那里手动开始读取配置文件),并且因为你不能通过一些IoC框架在ClassMap中注入依赖项(Classmaps需要一个无参数的构造函数), 我不得不用单身类的“老式方式”来做这件事:
单身人士:
公共类DefaultSchemaProvider { private static DefaultSchemaProvider _instance = null; private string _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);
}
}