3

我的模型看起来像这样...

[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; }
}

我不希望我的属性都是小写的。为什么我必须这样做,这是唯一的解决方法吗?

4

2 回答 2

4

Petapoco 需要确切的(区分大小写的)名称来匹配列,但是如果您指定Column属性,您可以按照您想要的方式释放属性名称(包括更改名称)

[Column("taskid")]
public int TaskID { get; set; }
于 2012-07-04T22:40:56.457 回答
0

如果 PetaPoco(不管是什么)一直生成带引号的标识符,你会没事的。如果它从不生成带引号的标识符,你会没事的。如果它有时而不是其他情况,则需要提交错误报告。

在您等待错误修复时,快速编辑宏/Perl 应该可以帮助您重命名列名等。看起来选择确实使用带引号的标识符,因此只需重命名表定义即可。

哦,当您需要执行任何手动 SQL 或与其他系统互操作时,您会发现 CamelCased 标识符完全是一件痛苦的事。

于 2012-07-04T21:26:40.307 回答