dmg
dmg

Reputation: 605

How to structure in-memory entity classes to load denormalized referenced documents from RavenDB

I am receiving a FormatException when trying to load a an Album document from the default RavenDB database:

     using (var session = _documentStore.OpenSession())
     {         
        var album = session.Load<Album>(500);
        //....
     }

The Album JSON document in the database looks like this:

{
 "AlbumArtUrl": "/Content/Images/placeholder.gif",
 "Genre": {
   "Id": "genres/10",
   "Name": "Classical"
 },
 "Price": 8.99,
 "Title": "The Best of Beethoven",
 "CountSold": 0,
 "Artist": {
   "Id": "artists/203",
   "Name": "Nicolaus Esterhazy Sinfonia"
 }

}

And my in-memory entity Album class looks like this:

public class Album
{
  public long Id { get; set; }
  public string AlbumArtUrl { get; set; }
  public DenomralizedGenre Genre { get; set; }      
  public decimal Price { get; set; }
  public string Title { get; set; }
  public int CountSold { get; set; }
  public DenomralizedArtist Artist { get; set; }      
}

public class DenomralizedGenre
{
   public int Id { get; set; }
   public string Name { get; set; }
}

public class DenomralizedArtist
{
   public int Id { get; set; }
   public string Name { get; set; }
}

What am I doing wrong here?

Upvotes: 0

Views: 122

Answers (1)

Eric Rohlfs
Eric Rohlfs

Reputation: 36

Make all your Id strings. You have them as int and long. In RavenDB Id's are strings.

The Id as a string would be Album/24 in RavenDB. The Class name or type plus the HiLo value (created by the client tools) make up the Id.

Upvotes: 1

Related Questions