Duke
Duke

Reputation: 1923

C# EF add data to model

I have those models

class Artist
{
    public int Id { get; set; }
    [StringLength(500)]
    public string Name { get; set; }
    [StringLength(50)]
    public string LastName { get; set; }

    public virtual ICollection<SimilarArtist> SimilarArtists { get; set; }   
}

class SimilarArtist
{
    public int Id { get; set; }
    public int ArtistId { get; set; }
    [ForeignKey("ArtistId")]
    public Artist Artist { get; set; }
    public int Similar_Artist_Id { get; set; }
}

So each artist have links to other 5 from the same table. When the migration generate database it made that stracture.

SELECT [Id]
      ,[Name]
      ,[LastName]
  FROM [dbo].[Artists]

SELECT [Id]
      ,[ArtistId]
      ,[Similar_Artist_Id]
  FROM [dbo].[SimilarArtists]

So when I do select the model it return this

var similar = _db.Artists.FirstOrDefault(x => x.Name == id).SimilarArtists.FirstOrDefault();

//similar.ArtistId 
//similar.Id
//similar.Similar_Artist_Id
//similar.Artist //the object which return main artist 

The question is how I can get in "var similar" not just Similar_Artist_Id but also name and lastname in the same request (without making requests by Similar_Artist_Id)

Upvotes: 0

Views: 92

Answers (2)

Gert Arnold
Gert Arnold

Reputation: 109252

You can do

var similar = _db.Artists.Where(x => x.Name == id)
              .Select(a => a.SimilarArtists.FirstOrDefault())
              .FirstOrDefault();

This gives you the first SimilarArtists (with all of its properties) of the first Artists matching the predicate x.Name == id.

Upvotes: 0

Ofiris
Ofiris

Reputation: 6151

var similarId = model.SimilarArtists.FirstOrDefault().Id;
var artiest = _db.Artists.Where(x.Id = similarId);

or just:

similar.Artist.Name

Or if you want to be able to have strongly-type property such as similar.ArtistName, create a [NotMapped] getter property.

class SimilarArtist
{
    public int Id { get; set; }
    public int ArtistId { get; set; }
    [ForeignKey("ArtistId")]
    public Artist Artist { get; set; }
    public int Similar_Artist_Id { get; set; }
    [NotMapped]
    public string ArtistName 
    {
       get 
       {
           return this.Artist.Name;            
       }
    }
}

Upvotes: 1

Related Questions