Circular reference

Könnyű belefutni az alábbi XML sorosítási hibaüzenetbe, ha webszolgáltatásokat használunk:

System.InvalidOperationException: There was an error generating the XML document. —> System.InvalidOperationException: A circular reference was detected while serializing an object of type Result.

Például előjöhet akkor, ha LINQ to SQL designer segítségével összerakjuk az alábbi modellt:

LINQ to SQL modell kapcsolatokkal

Majd utána megírjuk például az alábbi webszolgáltatást:

    [WebMethod]
    public List<Result> GetTopResults( int count, int songId, int difficulty )
    {
        HeroDataContext dc = new HeroDataContext();
        return dc.Results
.Where( r => r.SongID == songId && r.Difficulty == difficulty )
.OrderByDescending( r => r.Score )
.Take( count )
.ToList(); }

Már a LINQ kifejezés miatt is érdekes a fenti kód, de sajnos az előbb említett hibaüzenetet fogjuk kapni, aminek nyilván az asszociációk az okai. Konkrétan egy LINQ-es asszociáció kétirányú kapcsolatot biztosít például az ábrán látható Song és Result osztályok között. A Result osztálynak lesz SongID és Song tulajdonsága, a Song osztálynak pedig Results gyűjteménye. Ettől persze nagyon kényelmes a használatuk csak éppen a körkörös referenciák a sorosításnál bajt okoznak.

Íme a megoldás: állítsuk az asszociáció gyermek tulajdonságának láthatóságát Internalra:

Asszociáció tulajdonságai 

Ne felejtsük el ezt megtenni minden érintett kapcsolatra és remélhetőleg megoldódik a probléma!

 

Technorati Tags: ,,
Reklámok

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s