Как получить правильные объекты в Dapper с отношением NN? - PullRequest
0 голосов
/ 28 октября 2019

Я хочу получить все предложения, которые имеют данный тег.

У меня есть 3 модели Предложение:

public class OfferPlace : BaseModel
{
    public string Title { get; set; }
    public string Description { get; set; }
    public decimal CostPerHour { get; set; }
    public DateTime CreationDate { get; set; }
    public DateTime OfferValidity { get; set; }
    [Write(false)]
    public virtual ICollection<OfferPlaceTag> OffersTags { get; } = new List<OfferPlaceTag>();
}

Тег:

public class Tag : BaseModel
{    
    public string TagName { get; set; }
    [Write(false)]
    public virtual ICollection<OfferPlaceTag> OffersTags { get; } = new List<OfferPlaceTag>();
}

и OfferPlaceTag:

public class OfferPlaceTag : BaseModel
{
    public int OfferPlaceId { get; set; }
    [Write(false)]
    public virtual OfferPlace OfferPlace { get; set; }

    public int TagId { get; set; }
    [Write(false)]
    public virtual Tag Tag  { get; set; }
}

В BaseModel у меня есть Id и свойство IsActive.

В OfferPlaceRepository я создал этот метод:

public async Task<IEnumerable<OfferPlace>> GetAllOffersWithTag(string tagName)
{
    var sql = $"SELECT * FROM {TableName<OfferPlace>()} AS O" +
                $" INNER JOIN {TableName<OfferPlaceTag>()} AS OT ON O.Id = OT.OfferPlaceId" +
                $" INNER JOIN {TableName<Tag>()} AS T ON T.Id = OT.TagId" +
                $" WHERE O.IsActive = 'True' AND T.TagName = @tag";

    return await Execute(conn =>
    {
        return conn.Query<OfferPlace>(
            sql,
            new { tag = tagName });
    });
}

В Execute я создаю соединение SQL. Таким образом, этот метод возвращает правильное количество объектов, но все они имеют идентификатор первого объекта. Как я могу вернуть нужные объекты?

...