gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:40:31 26 4
gpt4 key购买 nike

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

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 列插入空值。

最佳答案

我同意这是一个非常奇怪和令人困惑的行为,因为他们的 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 - 如何关闭自动增量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27094827/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com