2012-07-04 27 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标识符是一个完整的痛苦。

相关问题