2012-07-04 52 views
3

我的模型看起來像這樣...如何爲PetaPoco和PostgreSQL創建表/列名的大小寫?

[PrimaryKey("TaskId")] 
public class Task 
{ 
    public int TaskId { get; set; } 

    [StringLength(1000)] 
    [DisplayName("What do you want to do?")] 
    public string Description { get; set; } 

    [DisplayName("When do you want it done?")] 
    [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = false)] 
    [DataType(DataType.Date)] 
    public DateTime CompleteByDate { get; set; } 

    public bool IsCompleted { get; set; } 

    public DateTime InsertDate { get; set; } 
    public DateTime UpdateDate { get; set; } 
} 

如果我試圖從任務表中提取數據,我首先看到的錯誤之一是這樣的......

ERROR: 42P01: relation "Task" does not exist 

的問題,據我可以告訴的是,PetaPoco產生這樣的SQL ...

SELECT "Task"."TaskId", "Task"."Description", "Task"."CompleteByDate", "Task"."IsCompleted", "Task"."InsertDate", "Task"."UpdateDate" FROM "Task" 

所以,用引號,資本事項,並在數據庫中列名只能在認可如果將它們放在引號中,則爲小寫。我想知道是否有辦法改變這種情況。我目前看到的唯一的解決辦法是讓我的模型看起來就像這樣(注意大小寫變化)...

[PrimaryKey("taskid")] 
[TableName("task")] 
public class Task 
{ 
    [Column("taskid")] 
    public int taskid { get; set; } 

    [StringLength(1000)] 
    [DisplayName("What do you want to do?")] 
    public string description { get; set; } 

    [DisplayName("When do you want it done?")] 
    [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = false)] 
    [DataType(DataType.Date)] 
    public DateTime completebydate { get; set; } 
    public bool iscompleted { get; set; } 
    public DateTime insertdate { get; set; } 
    public DateTime updatedate { get; set; } 
} 

我不希望我的屬性全部小寫。爲什麼我必須這樣做,這是唯一的解決辦法嗎?

回答

4

Petapoco需要準確的(區分大小寫)的名字列匹配,但是如果指定Column屬性,你可以自由的名稱的屬性你想要的方式(包括更改名稱)

[Column("taskid")] 
public int TaskID { get; set; } 
+0

謝謝,那就是訣竅。 – Carter

0

如果PetaPoco(不管那是什麼)一直生成帶引號的標識符,你會沒事的。如果它永遠不會生成帶引號的標識符,你會沒事的。如果它有時而不是其他,你需要提交一個錯誤報告。

當你在等待一個錯誤修正時,一些編輯宏/ Perl應該可以幫助你重新命名列名等。它看起來像選擇使用帶引號的標識符,所以只是重命名錶定義應該爲您。

哦,當你需要做任何手動SQL或與其他系統互操作時,你會發現CamelCased標識符是一個完整的痛苦。

相關問題