0

ActiveRecord 映射:

[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 查询。这个对我的“JobTitle”表的简单查询:

  select * from public.jobtitle => Castle Active Record
  select * from public."jobtitle" => Pg 

我该如何解决这个铸造问题?

4

2 回答 2

4

PostgreSQL 标识符区分大小写"JobTitle"不一样"jobtitle"。但是,未加引号的标识符将大小写折叠为小写。SQL 标准要求大小写折叠。

这意味着如果您使用以下内容创建表:

CREATE TABLE "JobTitle" (...)

您必须始终将其称为:

SELECT * FROM "JobTitle";

如果您省略引号:

SELECT * FROM JobTitle;

PostgreSQL case-folds JobTitleto jobtitle,你会得到一个关于表jobtitle不存在的错误。

一致地引用或使用所有小写标识符。

更多在用户手册的词法结构部分

于 2013-05-02T05:01:30.373 回答
0

我有同样的问题,但ActiveRecordStarter.CreateSchema(); 解决了我的问题。我猜你必须在初始化 ActiveRecordStarter 之后放置这行代码。

于 2014-01-07T10:44:12.510 回答