2013-10-23 57 views
0

模式,我有那些機型C#EF數據添加到

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

所以每個藝術家都來自同一個錶鏈接到其他5。當遷移生成數據庫時,就會產生這種結構。

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

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

所以,當我做選擇模型,可以返回此

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 

的問題是,我怎麼能在「類似的變種」得到不只是Similar_Artist_Id而且名稱,並在同一請求姓氏(不通過Similar_Artist_Id提出請求)

回答

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

或者只是:

similar.Artist.Name 

或者如果您希望能夠擁有強類型屬性(例如similar.ArtistName),請創建一個[NotMapped] getter屬性。

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

1)它對數據庫的請求更多。確定我可以做到這一點,但它不是一個點 2)similar.Artist.Name返回主藝術家的名字,並且它基於[ForeignKey(「ArtistId」)]每個藝術家對象5 – Duke

+0

相同,並且它返回信息I艾雷迪有 - >主要藝術家,但我需要基於Similar_Artist_Id的對象。這是一個問題。 – Duke

0

你可以做

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

這給你的第一SimilarArtists(與它的所有屬性)第一Artists匹配謂語x.Name == id的。