Castle Activerecord error is “relation does not ex

2019-03-05 02:23发布

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

DB connection:

enter image description here

DB config:

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


    }


}

And init on app started:

enter image description here

Test for example the Table:

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

        return jobTitle.Title;
    }

Error getting on Active record:

enter image description here

Trace is :

enter image description here

I understand that the request is еrror.Because incorrectly sending to pg sql query. And this simple query for my "JobTitle" table:

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

How can I solve this casting problem?

2条回答
可以哭但决不认输i
2楼-- · 2019-03-05 02:55

PostgreSQL identifiers are case sensitive; "JobTitle" isn't the same as "jobtitle". However, unquoted identifiers are case-folded to lower case. Case folding is required by the SQL standard.

This means that if you create a table with:

CREATE TABLE "JobTitle" (...)

you must consistently refer to it as:

SELECT * FROM "JobTitle";

if you omit the quotes:

SELECT * FROM JobTitle;

PostgreSQL case-folds JobTitle to jobtitle and you'll get an error about the table jobtitle no existing.

Either quote consistently or use all lower case identifiers.

More in the lexical structure section of the user manual.

查看更多
ら.Afraid
3楼-- · 2019-03-05 03:14

I have got the same issue, but ActiveRecordStarter.CreateSchema(); solves my problem. I guess you have to put this line of code after initialization of ActiveRecordStarter.

查看更多
登录 后发表回答