活动记录映射:
[ActiveRecord("JobTitle",Schema="public")]
public class JobTitle :ActiveRecordValidationBase<JobTitle>
{
[PrimaryKey(Column = "Id")]
public virtual int Id { get; set; }
[Property(Column = "Description")]
public virtual string Description { get; set; }
[Property(Column = "Title", NotNull = true)]
public virtual string Title { get; set; }
}
数据库连接:
数据库配置:
public class DbConfig
{
public static void Configure()
{
var connectionString=ConfigurationManager.ConnectionStrings["PgConnection"].ConnectionString;
var source = ActiveRecordSectionHandler.Build(DatabaseType.PostgreSQL82,connectionString);
ActiveRecordStarter.Initialize(source, typeof(JobTitle));
}
}
应用程序上的初始化已启动:
例如测试表:
//
// GET: /Home/
public string Index()
{
var jobTitle= JobTitle.TryFind(1);
return jobTitle.Title;
}
获取活动记录时出错:
跟踪是:
我知道请求是错误的,因为错误地发送到pg sql query。
这个简单的“JobTitle”表查询:
select * from public.jobtitle => Castle Active Record
select * from public."jobtitle" => Pg
我怎样才能解决这个铸造问题?
最佳答案
PostgreSQL标识符区分大小写;"JobTitle"
与"jobtitle"
不同。但是,未引用的标识符是按大小写折叠的。SQL标准要求进行Case折叠。
这意味着,如果创建表时使用:
CREATE TABLE "JobTitle" (...)
您必须始终将其称为:
SELECT * FROM "JobTitle";
如果省略引号:
SELECT * FROM JobTitle;
PostgreSQL实例折叠
JobTitle
至jobtitle
,您将获得关于表jobtitle
不存在的错误。要么始终如一地引用,要么使用所有小写标识符。
更多信息请参见lexical structure section of the user manual。