У меня есть небольшая проблема с моим кодом и с тем, чтобы с ним хорошо играть.
Когда я говорю, что мой код был унаследован, значит, это не мой дизайн.
Я пытаюсь заменить Entity Framework, поскольку вызовы базы данных менее чем эффективны, поэтому я хотел лучше контролировать создаваемый SQL, поэтому Dapper казался очевидным выбором.
Проблема, с которой я сталкиваюсь, заключается в том, что я изо всех сил пытаюсь сопоставить классы poco, которые у меня есть, с dapper multi query.
Проблема у меня следующая:
public Feed GetFeedDapper(int feedId)
{
Feed feed = null;
var sql =
@"
SELECT * FROM Feeds WHERE FeedId= @FeedId
SELECT * FROM FeedFilterParameters WHERE FeedId = @FeedId
SELECT * FROM TeamFeeds WHERE FeedId = @FeedId";
using (var multi = DbConnection.QueryMultiple(sql, new { FeedId = feedId }))
{
feed = multi.Read<Feed>().Single();
feed.Parameters = multi.Read<FeedFilterParameter>().ToList();
feed.TeamFeeds = multi.Read<TeamFeed>().ToList();
}
return feed;
}
Это дает мне правильные результаты из базы данных, и это нормально, проблема в том, что не все свойства объекта Feed сопоставляются. Фид имеет свойство InboundProperties типа InboundProperties, как показано ниже, и в базе данных они хранятся как InboundProperties_{PropName}. Эти свойства не сопоставляются, и ничего из того, что я пробовал в DapperExtensions или FluentMap, не работает.
public class InboundProperties
{
public string ExternalRef { get; set; }
public string ExternalRefPrevious { get; set; }
public string ExternalId { get; set; }
public string ExternalName { get; set; }
public string ExternalToken { get; set; }
public int ExternalAPICounts { get; set; }
public string ExternalLink { get; set; }
public string ExternalPicture { get; set; }
public string LastProcessedMessageId { get; set; }
public long? LastProcessedMessageTime { get; set; }
public DateTime? MessageCountStartDT { get; set; }
public Int32 TenancyId { get; set; }
public virtual int FeedScopeInt { get; set; }
}
Может ли кто-нибудь помочь мне сопоставить эти свойства??