Dapper 매핑 된 여러 릴레이션

c# dapper

문제

이것은 내 모델입니다.

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

나는 모델에 내 결과를 매핑하기 위해 dapper를 사용하고 싶다. 이것은 그것을 사용하는 나의 코드입니다,

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();

내 문제는 각 Defined 모델에 예제 데이터를 추가하는 방법입니다.

수락 된 답변

이 코드에서 내 문제를 해결 :

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

나는 그것이 충분히 깨끗하지 않다는 것을 안다.하지만 그것은 나를 위해 일했다. 감사



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.