Tôi đang cố gắng viết một phương thức kho lưu trữ cho Entity Framework Core 2.0 có thể xử lý các bộ sưu tập các thuộc tính con trả về bằng cách sử dụng .ThenInclude, nhưng tôi đang gặp rắc rối với thứ hai biểu hiện. Đây là một phương thức làm việc cho .Include, nó sẽ trả về các thuộc tính con (bạn cung cấp một danh sách các lambdas) của thực thể của bạn.Cách viết phương thức Repository cho .ThenInclude trong EF Core 2
public T GetSingle(Expression<Func<T, bool>> predicate, params Expression<Func<T, object>>[] includeProperties)
{
IQueryable<T> query = _context.Set<T>();
foreach (var includeProperty in includeProperties)
{
query = query.Include(includeProperty);
}
return query.Where(predicate).FirstOrDefault();
}
Bây giờ đây là nỗ lực của tôi lúc viết một phương pháp mà sẽ mất một tuple của hai biểu thức và nuôi những thành .Include (a => a.someChild) chuỗi .ThenInclude (b => b.aChildOfSomeChild) . Đây không phải là một giải pháp hoàn hảo bởi vì nó chỉ xử lý một đứa trẻ của một đứa trẻ, nhưng đó là một sự khởi đầu.
public T GetSingle(Expression<Func<T, bool>> predicate, params Tuple<Expression<Func<T, object>>, Expression<Func<T, object>>>[] includeProperties)
{
IQueryable<T> query = _context.Set<T>();
foreach (var includeProperty in includeProperties)
{
query = query.Include(includeProperty.Item1).ThenInclude(includeProperty.Item2);
}
return query.Where(predicate).FirstOrDefault();
}
Intellisense trả về lỗi "Loại không thể suy ra từ mức sử dụng, hãy thử chỉ rõ loại". Tôi có cảm giác đó là vì biểu thức trong Item2 cần phải được phân loại như bằng cách nào đó liên quan đến Item1, bởi vì nó cần phải biết về mối quan hệ con của nó.
Bất kỳ ý tưởng hay kỹ thuật nào tốt hơn để viết một phương pháp như thế này?
này đã được hỏi nhiều lần kể từ khi nó là de facto một tiêu chuẩn của quy định cụ thể mong muốn bao gồm các phương pháp sử dụng kho EF6. Thật thú vị khi nghe một số thành viên nhóm EFC lý do đằng sau quyết định thay đổi mẫu thành 'Include' /' ThenInclude' mà dường như không thể đại diện theo cách này, và quan trọng hơn, thay thế EFC là gì. –