Я сталкиваюсь с этим снова и снова: пишу код для создания экземпляров сущностей (то есть для заполнения строк в базе данных), где существуют дочерние ассоциации (то есть ссылки FK), которые необходимо заполнить.
Пример:
namespace EomApp1.Formss.AB2.Model
{
public class UnitConversionSource : EomApp1.Formss.AB2.Model.IUnitConversionSource
{
IEnumerable<UnitConversion> IUnitConversionSource.UnitConversions(DirectAgentsEntities model)
{
yield return new UnitConversion
{
Coefficient = 1,
FromUnit = model.Units.First(c => c.Name == "USD"),
ToUnit = model.Units.First(c => c.Name == "USD"),
DateSpan = new DateSpan
{
FromDate = DateTime.Now,
ToDate = DateTime.Now.Add(TimeSpan.FromHours(1))
}
};
}
}
}
Желаемый: выполняется первое выполнение в заданном периоде истечения (скажем, 10 секунд) model.Units.First(c => c.Name == "USD")
, объект извлекается из базы данных, но впоследствии (в течение срока действия) поступает из кэша памяти.
Цель: не допустить, чтобы цикл, вставляющий миллион строк, выполнял один и тот же запрос выбора миллион раз.
Меня, в частности, интересует неинтрузивное решение, которое не влияет на то, как я пишу код в примере. Это (мы надеемся) в духе лучших практик с точки зрения разделения интересов.
(ps: я не уверен, было ли мое использование термина «неинтрузивный» стандартным семантическим - дайте мне знать, если есть лучший способ выразить это)