У меня есть 2 класса с одним ко многим, как это:
public class Parent
{
public virtual List<Child> Children {get; set;}
}
Я также использую классы репозитория для каждой модели, то есть:
Родитель имеет свой собственный класс репо, которыйимеет функцию Get (), которая может получить упорядоченный список родителей.
Child также имеет свой собственный класс репо, который имеет функцию Get (), которая может получить упорядоченный список детей, которые имеют статус Active.
Проблема в том, как работает EF, поскольку родительский элемент имеет ссылку на дочерние элементы, EF автоматически загружает дочерние элементы при загрузке родительского списка, но становится активным и неактивным дочерним элементом (также список дочерних элементов не упорядочен.).Проверка активного состояния выполняется только в репозитории Child.
Как я могу ограничить повторение правил «get», которые будут использоваться везде, где есть доступ к детям.
Я знаю, что могу просто изменитьВ родительском репозитории также проверяется статус ребенка = активный, но затем я повторяю свою логику в каждом классе, в котором есть дети ...
Редактировать: у меня есть класс репозитория для ребенка, который возвращает упорядоченный список детей:
public List<Children> GetList()
{
IQueryable<Children> query = context.Set<Children>();
return query.OrderBy(a=>a.Seq).ToList();
}
Это прекрасно работает, когда мне просто нужен прямой доступ к Детям.Но когда мне нужно получить родительский класс, я использую функцию репо:
ParentRepo GetByID:
public Parent GetByID(object id)
{
IQueryable<Parent> query = context.Set<Parent>();
Parent parentModel = context.Parents.Where(a => a.ParentId == (int)id)
.Select(a => new
{
Parent = a,
Children = a.Children.OrderBy(b => b.Seq)
}).ToList()
.Select(q => q.Parent)
.Single();
return parentModel;
}
Как вы можете видеть, мне пришлось также заказывать детей здесь (Seq).
Это единственный способ, которым я могу думать, чтобы сделать эту работу, но это не кажется правильным.
public Parent GetByID(object id)
{
IQueryable<Parent> query = context.Set<Parent>();
Parent parentModel = context.Parents.Single(a => a.ParentId == (int)id);
parentModel.Children = childRepo.GetList(id);
return parentModel;
}