0

ネストされたマッピングを実行しようとしていますが、ネストされたオブジェクトが null です。つまり、私の場合result[0].Locationは null です。Postgres と一緒に NPoco 3.3.0-beta3 を使用しています。

コードスニペットは次のとおりです。

var db = new Database(new NpgsqlConnection(configurations["ConnectionStrings:Database"]));

var sql = Sql.Builder
    .Append("SELECT r.*, l.* FROM race r")
    .Append("INNER JOIN location l ON r.location_id = l.id");

using (db.Connection)
{
    db.Connection.Open();
    var result = Db.Fetch<RaceEntity>(sql);
    // result[0].Location == null
}

種族エンティティ:

[TableName("race")]
[PrimaryKey("id", AutoIncrement = true)]
public class RaceEntity
{
    [Column("id")]
    public int Id { get; set; }

    [Column("name")]
    public string Name { get; set; }

    [Column("location_id")]
    public int LocationId { get; set; }

    [Column("date")]
    public DateTime Date { get; set; }

    [ResultColumn]
    public LocationEntity Location { get; set; }
}

LocationEntity

[TableName("location")]
[PrimaryKey("id", AutoIncrement = true)]
public class LocationEntity
{
    [Column("id")]
    public int Id { get; set; }

    [Column("name")]
    public string Name { get; set; }

    [Column("province")]
    public string Province { get; set; }

    [Column("postal")]
    public string Postal { get; set; }

    [Column("country")]
    public string Country { get; set; }

    [Column("iso_code")]
    public string IsoCode { get; set; }
}

レーステーブル

CREATE TABLE "race" (
    "id" SERIAL PRIMARY KEY,
    "name" VARCHAR(100) NOT NULL,   
    "location_id" INTEGER REFERENCES "location" (id),
    "date" date NOT NULL
);

ロケーションテーブル

CREATE TABLE "location" (
    "id" SERIAL PRIMARY KEY,
    "name" VARCHAR(100) NOT NULL,
    "province" VARCHAR(100) NULL DEFAULT NULL,
    "postal" VARCHAR(30) NULL DEFAULT NULL,
    "country" VARCHAR(70) NOT NULL,
    "iso_code" VARCHAR(10) NULL DEFAULT NULL
);
4

1 に答える 1

0

[ResultColumn]プロパティから属性を削除しLocationます。Locationプロパティはデータベースの列ではないため、属性は必要ありません。

プロパティがデータベースの列であったとしても、 NPoco wikiから次のことに注意する必要があります。

注: これらの列は、SQL で明示的に指定する必要があります。自動生成された SQL には含まれません。

于 2016-05-20T21:38:20.567 に答える