PetaPoco - 如何关闭自动增量
本文关键字:何关闭 PetaPoco | 更新日期: 2023-09-27 18:31:33
我在尝试插入时遇到了此错误:
无法将值 NULL 插入到列"Id"中
事实证明,默认情况下 PetaPoco 假设 Id 列是自动递增的,因此即使您提供值,它也会尝试插入 null。 我在这里找到了问题的错误票:https://dnntracker.atlassian.net/browse/DNN-23217。
我正在使用 PetaPoco 的 T4 模板来生成我的数据库类。 我创建了一个分部类,并应用了数据注释来禁用自动增量:
[PrimaryKey("Id", autoIncrement = false)]
public partial class Blah : DatabaseDB.Record<Database.Blah>
{
}
然而,它似乎没有效果。 当我指定整数时,PetaPoco 仍在尝试为 Id 列插入 null。
我同意这是一种非常奇怪和令人困惑的行为,因为他们的 API 并不总是使用该属性。
有两种方法可以使其工作。
一种是在示例中不使用属性,而是将重载方法与 autoIncrement 参数一起使用,并将其设置为 false。下面是一个完整的示例:
// Create a PetaPoco database object
var db = new PetaPoco.Database("ConnectionSt");
// Create an article
var a = new Article
{
article_id = 152,
title = "My new article",
content = "PetaPoco was here",
date_created = DateTime.UtcNow
};
// Insert it by turning off auto-increment
db.Insert("articles", "article_id", false, a);
另一种是使用将对象作为参数的 insert 方法:
// Create an article
var a = new Articles
{
article_id = 1111,
title = "My new article",
content = "PetaPoco was here",
date_created = DateTime.UtcNow
};
// Insert it by using the insert method that will use the attribute!
db.Insert(a);
将对象作为参数的重载是唯一在内部使用 PrimaryKey
属性的重载,它应该在你的方案中像超级按钮一样工作。