2014-04-24 15 views
0

我正在调查ServiceStack,并使用OrmLite来对付PostgreSQL数据库。我创建了我的POCO类,如下所示:我可以让OrmLite使用小写字母作为PostgreSQL列名称,而不是使用小写字母命名吗?

public class Company 
{ 
    [AutoIncrement] 
    public long Id { get; set; } 
    public string CompanyName { get; set; } 
    public int NumberOfLicenses { get; set; } 
} 

我也设置在Global.asax文件中的数据库连接,每对SS站点上的说明。代码如下:

container.Register<IDbConnectionFactory>(
       c => new OrmLiteConnectionFactory("Server=localhost;Port=5432;SearchPath=company;Database=company;User Id=ABC; Password=XYZ;", PostgreSqlDialect.Provider) 
       { 
        ConnectionFilter = x => new ProfiledDbConnection(x, Profiler.Current) 
       }); 

正如您所看到的,我使用了PostgreSQL方言提供程序和小型分析器。由于我的测试,我只是将假数据在这里也:

using (IDbConnection db = container.Resolve<IDbConnectionFactory>().Open()) 
      { 
       db.Insert(new Company { CompanyName = "Company A", NumberOfLicenses = 13}); 
       db.Insert(new Company { CompanyName = "Company B", NumberOfLicenses = 82}); 
       db.Insert(new Company { CompanyName = "Company C", NumberOfLicenses = 16}); 
       db.Insert(new Company { CompanyName = "Company D", NumberOfLicenses = 8}); 
       db.Insert(new Company { CompanyName = "Company E", NumberOfLicenses = 107}); 
       db.Insert(new Company { CompanyName = "Company F", NumberOfLicenses = 56}); 
      } 

当我运行应用程序,我得到的错误:错误:42703:列关系的“COMPANY_NAME”,“公司”不存在

这很有意义,因为我的数据库在公司表中有一个名为companyname的列,而不是company_name。 PostgreSQL是特别关于案件,所以我使我的列名全部小写。但是,我的POCO属性是骆驼案件。它看起来像PostgreSQL提供程序代码强制camelcase属性在每个大写字母之间用_符号命名。在数据库中,我暂时将公司名称列重命名为company_name,并且确实将错误移至了NumberOfLicenses属性,该属性变为number_of_licenses。

我可以更改此行为吗,以便我的POCO属性映射为小写而不带_符号?

感谢

回答

0

您可以使用指定自己的命名策略:

public class LowercaseNamingStrategy : OrmLiteNamingStrategyBase 
{ 
    public override string GetTableName(string name) 
    { 
     return name.ToLower(); 
    } 

    public override string GetColumnName(string name) 
    { 
     return name.ToLower(); 
    } 

} 

OrmLiteConfig.DialectProvider.NamingStrategy = new LowercaseNamingStrategy(); 
相关问题