W aplikacji odwołuję się do bazy danych zwykłym zapytaniem i czytając przez wbudowany SqlDataReader
dane są standardowo konwertowane i wpisywane do prostych obiektów (POCO) które mają jedynie zaimplementowane OnPropertyChanged
W ten sposób pobieram elementy, jednak chciałbym pobrać subelementy i zrobić to leniwie, tj. tylko w przypadku odwołania się do nich.
W encjach nie mogę się odwoływać do serwisu po pierwsze ze względu na architekturę
Czy dobrą praktyką jest przekazywanie do encji instancji serwisu która pobrała element, tak żeby encja w przypadku odwołania do subelementów mogła się odwołać do serwisu? Czy takie rozwiązanie jest stosowane?
Pseudokod jak miałoby to wyglądać:
public interface ISubElementsSvc
{
List<Subelement> GetSubElements(int elementId);
}
public class DataService : ISubElementsSvc
{
public List<Element> GetElements()
{
// mock
return new List<Element>
{
new Element { Id = 1, Name = "a", Svc = this },
new Element { Id = 2, Name = "b", Svc = this },
new Element { Id = 3, Name = "c", Svc = this }
};
}
public List<Subelement> GetSubElements(int elementId)
{
// mock
return new List<Subelement>
{
new Subelement { Name = "aa" },
new Subelement { Name = "bb" },
new Subelement { Name = "cc" }
};
}
}
public class Element
{
public int Id { get; set; }
public string Name { get; set; }
public ISubElementsSvc Svc { get; set; }
Lazy<List<Subelement>> subelements = new Lazy<List<Subelement>>(() => Svc.GetSubElements(this.Id));
public List<Subelement> Subelements
{
get { return subelements.Value; }
}
}
public class Subelement
{
public string Name { get; set; }
}
Proszę bez sugestii o zmianę na entity framework czy cokolwiek innego bo to nie wchodzi w grę