#c# #sql #orm #insight.database
#c# #sql #orm #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
Ответ №1:
Это возможно с небольшой настройкой на стороне запроса. Не уверен, возможно ли это с атрибутами.
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.База данных может быть.
Ответ №2:
Вы могли бы попробовать
public interface IRepo
{
[Recordset(1, typeof(RuleDetail), into="Source", IsChild=true)]
[Recordset(2, typeof(RuleDetail), into="Destination", IsChild=true)]
Rule GetFullyPopulatedRuleByIdStoredProcedure(int id);
}
Вам нужно будет вернуть три набора записей — первый [набор записей (0)] является вашим правилом, два других содержат источник и назначение. Я часто использую эту схему, она хорошо работает для меня.
Я не знаю ни одного способа сделать это, если вы возвращаете одну строку в одном наборе записей.