Отображение столбца Insight.Database в объект
Я использую Insight.Database
как наш микро-ORM. Я хотел выяснить, есть ли способ взять следующие ассоциации классов POCO и отобразить результаты из одной строки в эти объекты.
public class Rule
{
public int Id { get; set; }
public string Name { get; set; }
public RuleDetail Source { get; set; }
public RuleDetail Destination { get; set; }
}
public class RuleDetail
{
public int Id { get; set; }
public Name { get; set; }
public Date DateTime { get; set; }
// omitted...
}
Вот столбцы, которые возвращаются из нашей хранимой процедуры:
Id
Name
// Should map to Source object.
SourceId
SourceName
SourceDateTime
// Should map to Destination object.
DestinationId
DestinationName
DestinationDateTime
2 ответа
Это возможно с небольшой настройкой на стороне запроса. Не уверен, если это возможно с атрибутами.
var returns = Query.Returns(
new OneToOne<Rule, RuleDetail, RuleDetail>(
callback: (rule, source, destination) => {
rule.Source = source;
rule.Destination = destination;
},
columnOverride: new ColumnOverride[] {
new ColumnOverride<RuleDetail>("SourceId", "Id"),
new ColumnOverride<RuleDetail>("SourceName", "Name"),
new ColumnOverride<RuleDetail>("SourceDateTime", "DateTime"),
new ColumnOverride<RuleDetail>("DestinationId", "Id"),
new ColumnOverride<RuleDetail>("DestinationName", "Name"),
new ColumnOverride<RuleDetail>("DestinationDateTime", "DateTime"),
},
splitColumns: new Dictionary<Type, string>() {
{ typeof(Rule), "Id" },
{ typeof(RuleDetail), "SourceId" },
{ typeof(RuleDetail), "DestinationId" },
}
)
);
return Db.Query(procedure, params, returns);
Я не уверен, необходим ли весь этот код для его работы, но он определенно показывает, насколько мощными могут быть запросы в Insight.Database.
Вы могли бы попробовать
public interface IRepo
{
[Recordset(1, typeof(RuleDetail), into="Source", IsChild=true)]
[Recordset(2, typeof(RuleDetail), into="Destination", IsChild=true)]
Rule GetFullyPopulatedRuleByIdStoredProcedure(int id);
}
Вам нужно будет вернуть три набора записей: первый [Recordset(0)] будет вашим правилом, а два других содержат Source и Destination. Я часто использую это устройство, оно хорошо работает для меня.
Я не знаю, как это сделать, если вы возвращаете одну строку в одном наборе записей.