4

挿入しようとすると、次のエラーが発生しました。

列 'Id' に値 NULL を挿入できません

デフォルトでは、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 を挿入しようとしています。

4

1 に答える 1

6

API が常にその属性を使用しているわけではないため、これは本当に奇妙で紛らわしい動作です。

機能させるには 2 つの方法があります。

1 つは、例で属性を使用せず、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);

もう 1 つは、オブジェクトをパラメーターとして受け取る 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あり、シナリオでは魅力的に機能するはずです。

于 2014-11-23T22:32:46.270 に答える