2016-05-20 3 views
0

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

コードスニペット:

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 
} 

RaceEntity:

[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 
); 
+0

申し訳ありませんが、ここではセグーコメントを作成する必要がありました。クラスがすべて属性で装飾されている場合、どのように名前にpocoという名前を付けることができないのですか...それはPOCOではありません。私は、ちょうどペタポコを見て、あなたは私が何を意味するのか理解するでしょう... – code4life

答えて

0

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

プロパティは、データベースのカラムであったとしても、あなたはNPoco wiki

ノートから次のことを注意することが必要になります。これらの列が明示的にSQLで指定する必要があります。 自動生成されたSQLには含まれません。

関連する問題