编程语言
首页 > 编程语言> > c# – PetaPoco – 如何关闭自动增量?

c# – PetaPoco – 如何关闭自动增量?

作者:互联网

我在尝试插入时遇到了这个错误:

Cannot insert the value NULL into column ‘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属性的重载,它应该像场景中的魅力一样工作.

标签:c,petapoco,micro-orm
来源: https://codeday.me/bug/20190612/1224001.html