繁体   English   中英

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

[英]Castle Activerecord error is “relation does not exist” on Postgresql?

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


    }


}

并在应用程序上启动了init:

在此处输入图片说明

测试例如表:

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

        return jobTitle.Title;
    }

在活动记录上出错:

在此处输入图片说明

跟踪是:

在此处输入图片说明

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

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

如何解决铸造问题?

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

这意味着如果您使用以下方法创建表:

CREATE TABLE "JobTitle" (...)

您必须始终将其称为:

SELECT * FROM "JobTitle";

如果您省略引号:

SELECT * FROM JobTitle;

PostgreSQL将JobTitle折叠为jobtitle ,您将得到有关表jobtitle不存在的错误。

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

用户手册词法结构部分中有更多内容。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM