活动记录映射:

[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实例折叠JobTitlejobtitle,您将获得关于表jobtitle不存在的错误。
要么始终如一地引用,要么使用所有小写标识符。
更多信息请参见lexical structure section of the user manual

10-07 12:39