Castle Activerecord错误是Postgresql上的“关系不存在”?

时间:2013-05-02 04:43:49

标签: c# postgresql nhibernate castle-activerecord npgsql

ActiveRecord mape:

[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; }

}

enter image description here

数据库连接:

enter image description here

数据库配置:

 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)); 


    }


}

在app上启动了init:

enter image description here

测试例如表:

    //
    // GET: /Home/
    public string Index()
    {
        var jobTitle= JobTitle.TryFind(1);

        return jobTitle.Title;
    }

启用活动记录时出错:

enter image description here

跟踪是:

enter image description here

我理解请求是错误的。因为错误地发送到pg sql查询。 这个简单的查询我的“JobTitle”表:

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

如何解决这个铸造问题?

2 个答案:

答案 0 :(得分:4)

PostgreSQL标识符区分大小写; "JobTitle""jobtitle"不同。但是,未加引号的标识符 case-folded 为小写。 SQL标准需要进行大小写折叠。

这意味着如果您创建一个表格:

CREATE TABLE "JobTitle" (...)

你必须始终将其称为:

SELECT * FROM "JobTitle";

如果省略引号:

SELECT * FROM JobTitle;

PostgreSQL案例折叠JobTitlejobtitle,您将收到有关表jobtitle不存在的错误。

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

lexical structure section of the user manual中的更多内容。

答案 1 :(得分:0)

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