Nat*_*n W 9 c# postgresql nhibernate fluent-nhibernate
我已经开始使用NHibernate 3.0和PostgreSQL进行一个小项目,到目前为止,由于NHibernate站点已关闭,这个过程有点粗糙,我确信这个答案在他们的网站上.
我有一个包含这两列的数据库(当然在真实表中还有更多):
int ID
String Feature
Run Code Online (Sandbox Code Playgroud)
现在我正在使用FluentNHibernate进行映射,所以这样的事情:
public class MyEntityMap: ClassMap<MyEntity>
{
public MyEntityMap()
{
Id(x => x.ID);
Map(x => x.Feature);
}
}
Run Code Online (Sandbox Code Playgroud)
和一个LINQ查询来获取数据
var strucs = from str in session.Query<MyEntity>()
where str.ID < 5
select str;
Run Code Online (Sandbox Code Playgroud)
该查询将生成正确的SQL语句.问题是,因为我的列名中有大写字母,你必须用引号将它们包装起来,但生成的SQL代码看起来像这样:
SELECT this_.ID as ID0_0_, this_.feature as feature0_0_,
FROM "MyEntity" this_ WHERE this_.ID < 5
Run Code Online (Sandbox Code Playgroud)
列中没有引号.如果我运行这个,我得到一个"列this_.id"找不到等.
有谁知道如何让NHibernate将列名包装在引号中?
编辑:我不能小写列名称,因为有些列第三方程序需要全部为大写.
我尝试添加.ExposeConfiguration(cfg => cfg.SetProperty("hbm2ddl.keywords","auto-quote")但它似乎没有做任何事情.
我意识到这是一个相当老的问题,但对于其他可能最终会出现在这里的问题,您也可以实现自定义命名策略,在设置会话工厂时您将添加:
Fluently.Configure(new Configuration()
.SetNamingStrategy(new CustomNamingStrategy()))...
Run Code Online (Sandbox Code Playgroud)
在 CustomNamingStrategy 中,实现 NHibernate.Cfg.INamingStrategy 接口,并且所有方法基本上只返回带引号的参数。
由于hbm2ddl.keywords应该为您执行此操作但它不起作用,因此我建议您获取nhibernate source,并在您的项目中调试它。
也许您可以从 SessionFactoryImpl.cs 第 171 行上的断点开始
if (settings.IsAutoQuoteEnabled)
Run Code Online (Sandbox Code Playgroud)
查看SchemaMetadataUpdater.cs 上的方法public static void QuoteTableAndColumns(Configuration configuration)
希望有帮助。
归档时间: |
|
查看次数: |
3084 次 |
最近记录: |