我的模特看起来像这样......
[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; }
}
如果我尝试从Task表中获取数据,我将看到的第一个错误之一是......
ERROR: 42P01: relation "Task" does not exist
据我所知,问题是PetaPoco会生成像这样的SQL ......
SELECT "Task"."TaskId", "Task"."Description", "Task"."CompleteByDate", "Task"."IsCompleted", "Task"."InsertDate", "Task"."UpdateDate" FROM "Task"
因此,使用引号,大写很重要,而在DB中,如果将列名放在引号中,则列名仅在所有小写中被识别。我想知道是否有办法改变这种状况。我目前看到的唯一解决方法是让我的模型看起来像这样(注意大小写更改)......
[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; }
}
我不希望我的属性都是小写的。为什么我必须这样做,这是唯一的解决办法吗?
答案 0 :(得分:4)
Petapoco需要与列匹配的确切(区分大小写)名称,但如果您指定Column
属性,则可以按照您希望的方式释放该属性的名称(包括更改名称)
[Column("taskid")]
public int TaskID { get; set; }
答案 1 :(得分:0)
如果PetaPoco(无论是什么)生成引用的标识符,那么你就可以了。如果它永远不会生成带引号的标识符,那么您就可以了。如果它有时而不是其他人,那么您需要提交错误报告。
当您等待修复错误时,快速编辑宏/ Perl应该可以帮助您重命名列名等。看起来选择确实使用带引号的标识符,所以只需重命名表定义就可以了对你而言。
哦,当您需要进行任何手动SQL或与其他系统互操作时,您会发现CamelCased标识符非常痛苦。