2017-03-03 73 views
0

這是我的模型:小巧玲瓏的映射倍數關係

public class Word 
{ 
    public string Word1 { get; set; }    
    public string SpecialCases { get; set; } 

    public virtual ICollection<Defination> Definations { get; set; } 
} 

public class Defination 
{ 
    public long WordId { get; set; }   
    public string Subjects { get; set; }  
    public virtual Word Word { get; set; }   

    public virtual ICollection<Example> Examples { get; set; } 
} 

public class Example 
{ 
    public long DefinationId { get; set; }    
    public string English { get; set; }   

    public virtual Defination Defination { get; set; } 
} 

我想用短小精悍來映射我的結​​果模型。這是我的代碼使用它,

string query = 
    $"SELECT Word.*, Defination.* " + 
    $"FROM Word Left Join Defination On Word.id = Defination.Id " +      
    $"WHERE Word.id = {id} ";     
    var item2 = cn.Query<Word, Defination, Word>(query, 
     (Word, Defination) => 
      {        
       Word.Definations.Add(Defination); 
       Defination.Word = Word;        
       return Word; 
      } 
     ); 
    return item2.FirstOrDefault(); 

我的問題是如何將示例數據添加到每個定義模型。

回答

0

我解決我的問題,從這個代碼:

public Word GetByID(long id) 
     { 
      using (IDbConnection cn = Connection) 
      { 
       cn.Open(); 
       const string wordQuery = "SELECT * FROM Word WHERE Id = @Id AND Word.SoftDelete = 0 "; 
       Word _word = cn.Query<Word>(wordQuery, new { Id = id }).FirstOrDefault(); 
       if(_word != null && _word.Id != 0) 
       { 
        const string definationQuery = "SELECT * FROM Defination where WordId = @WordId AND SoftDelete = 0"; 
        List<Defination> _defination = cn.Query<Defination>(definationQuery, new { WordId = _word.Id }).ToList(); 
        _word.Definations = _defination; 
        if(_defination != null && _defination.Any()) 
        { 
         const string exampleQuery = "SELECT * FROM Example where DefinationId = @DefinationId AND SoftDelete = 0"; 
         for (int i=0; i<_defination.Count(); i++) 
         { 
          _defination[i].Examples = cn.Query<Example>(exampleQuery, new { DefinationId = _defination[i].Id }).ToList();        
         }       
        } 
       } 

       return _word; 
      } 
     } 

我知道它不夠乾淨,但它爲我工作。謝謝