2013-05-02 65 views
0

ActiveRecord的MAPE:Castle Activerecord錯誤是Postgresql上的「關係不存在」?

[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連接:

enter image description here

DB配置:

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上的應用程序啓動:

enter image description here

測試例如表:

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

     return jobTitle.Title; 
    } 

錯誤獲取上的活動記錄:

enter image description here

Trace是:

enter image description here

我知道請求是錯誤的。因爲錯誤地發送到pg sql查詢。 而對於我的「JOBTITLE」表這個簡單的查詢:

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

我怎樣才能解決這個問題,鑄造?

+0

你已經孤立了原因。如果您無法修復查詢生成器,則只需使用所有小寫表名稱即可解決該問題。 – 2013-05-02 04:48:58

+0

**克雷格林格** - 有什麼區別小或大字符?,和我的問題Castle ActiveRecord查詢到Pgsql sql鑄造,爲exp:'public.jobtitle-> public。「jobtitle」'。 – Elyor 2013-05-02 04:54:04

回答

4

PostgreSQL標識符是區分大小寫; "JobTitle""jobtitle"不一樣。但是,未加引號的標識符是大小寫合併爲的小寫字母。 SQL標準要求大小寫摺疊。

這意味着,如果你創建一個表:

CREATE TABLE "JobTitle" (...) 

你必須始終把它稱爲:

SELECT * FROM "JobTitle"; 

如果省略報價:

SELECT * FROM JobTitle; 

的PostgreSQL案例摺疊JobTitlejobtitle,你會得到一個關於表01的錯誤不存在。

一致地引用或使用所有小寫字母標識符。

更多在lexical structure section of the user manual

+0

ok right!,thx for answ :)。我現在的問題不是現在的任何,而是使用Castle ActiveRecord合併的pg sql語法! – Elyor 2013-05-02 05:07:45

+0

我有這個類的邏輯。這裏:'[ActiveRecord("JobTitle",Schema="public「)]' – Elyor 2013-05-02 05:12:18

+0

@lelyor我真的不知道你想說什麼與這些評論。 – 2013-05-02 05:27:23

0

我得到了同樣的問題,但ActiveRecordStarter.CreateSchema();解決了我的問題。我猜你必須在ActiveRecordStarter初始化後放置這一行代碼。

+0

好的,我可以優化這個問題嗎? – Elyor 2014-01-09 08:04:38

相關問題