我正在调查ServiceStack并且正在使用OrmLite来对抗PostgreSQL数据库。我创建了我的POCO类,如下所示:
public class Company
{
[AutoIncrement]
public long Id { get; set; }
public string CompanyName { get; set; }
public int NumberOfLicenses { get; set; }
}
我还根据SS站点上的指示在Global.asax文件中设置数据库连接。这是代码:
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});
}
当我运行应用程序时,出现错误:ERROR:42703:关系“company”的列“company_name”不存在
这是有道理的,因为我的数据库在公司表中有一个名为companyname的列,而不是company_name。 PostgreSQL特别关注case,所以我的列名都是小写的。但是,我的POCO属性是驼峰式的。看起来PostgreSQL提供程序代码强制使用每个大写字母之间的_符号命名camelcase属性。在数据库中,我暂时将companyname列重命名为company_name,果然,错误已移至NumberOfLicenses属性,该属性变为number_of_licenses。
我是否可以更改此行为,以便我的POCO属性在没有_符号的情况下映射为小写?
由于
答案 0 :(得分: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();