2016-05-20 16 views
0

Ich versuche, ein verschachteltes Mapping auszuführen, aber das verschachtelte Objekt ist null. Was bedeutet, in meinem Fall result[0].Location ist null. Ich verwende NPOco 3.3.0-beta3 zusammen mit Postgres.Verschachteltes Objekt-Mapping mit NPoco 3

Hier ist der Code-Schnipsel:

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; } 
} 

Rennen Tabelle

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

Lage Tabelle

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

Entschuldigung, ich musste hier nur einen Kommentar machen: Ich verstehe nicht, wie sie das Wort poco in den Namen setzen können, wenn die Klassen alle Attribut-geschmückt sind ... das ist überhaupt kein POCO! Ich meine, schau dir Petapoco an und du wirst verstehen, was ich meine ... – code4life

Antwort

0

Attribut löschen [ResultColumn] von Location Eigenschaft. Location Eigenschaft ist keine Spalte in der Datenbank und erfordert daher nicht das Attribut.

Auch wenn die Eigenschaft eine Spalte in der Datenbank war, müssten Sie die folgenden von NPoco wiki

Hinweis zu beachten: Diese Spalten müssen explizit in der SQL angegeben werden. Es wird nicht in der automatisch generierten SQL enthalten sein.

Verwandte Themen