الاقتران بين نمط Repository واستخدام Entity Framework 7 ليس فقط تحدٍ في بناء تطبيق فعّال ولكن أيضًا يتطلب فهماً عميقًا لكيفية تحميل البيانات بشكل فعّال. في تطبيقي، أقوم بتوسيع طريقة GetById في الـ Repository لدعم تحميل الكيانات بشكل مبكر باستخدام ThenInclude.
لنبدأ بالتعديل على الكود الحالي:
csharppublic virtual TEntity GetById(int id, params Expressionobject >>[] paths)
{
var result = this.Set.Include(paths.First());
foreach (var path in paths.Skip(1))
{
result = result.Include(path);
}
return result.FirstOrDefault(e => e.Id == id);
}
الآن، لدعم ThenInclude وتحميل الكيانات المتداخلة، يمكننا تحسين الكود كالتالي:
csharppublic virtual TEntity GetById(int id, params Expressionobject >>[] paths)
{
var result = this.Set.Include(paths.First());
foreach (var path in paths.Skip(1))
{
if (path.Body is MemberExpression memberExpression)
{
result = result.ThenInclude(memberExpression);
}
else if (path.Body is MethodCallExpression methodCallExpression)
{
// Handle methods like Select, Where, etc.
// You may need to customize this part based on your requirements.
result = result.ThenInclude(methodCallExpression);
}
}
return result.FirstOrDefault(e => e.Id == id);
}
الآن، يمكنك استخدام GetById بشكل مماثل للحصول على كيان مع تحميل كيانات متداخلة:
csharpproductRepository.GetById(2, p => p.Orders, p => p.Orders.ThenInclude(o => o.LineItems), p => p.Parts);
هذا التعديل يمكن أن يسمح لك بتحميل الكيانات المتداخلة بشكل فعّال باستخدام ThenInclude في Entity Framework 7، مما يوفر لك قاعدة قوية لتوسيع تطبيقك بشكل أفضل وفقًا لاحتياجات متطلبات المشروع.
المزيد من المعلومات
باستخدام نمط Repository Pattern في تطبيقي الذ