У меня есть сущность, которая выглядит следующим образом:
public class UserOrganization
{
public string UserId { get; set; }
[ForeignKey("UserId")]
public MyUser User { get; set; }
public int OrganizationId { get; set; }
[ForeignKey("OrganizationId")]
public Organization Organization { get; set; }
}
Вышеупомянутая сущность используется для обеспечения отношения «многие ко многим» между MyUser
и Organization
сущностями.Теперь, когда я хочу получить данные из своего репозитория для пользователя, я также хочу включить данные для организации, и у меня есть что-то вроде этого:
public IEnumerable<MyUser> GetFullUsers()
{
return _context.Users
.Include(u => u.Location)
.Include("UserOrganizations.Organization")
// And many other include statements removed for breivty.
.ToList();
}
Теперь все работает нормально, и я получаюсоответствующие данные, но для "UserOrganizations.Organization"
я получаю много вложенных данных.Я имею в виду, что моя сущность Organization
включает членов типа MyUser
, а затем показывает пользователей, а затем снова организации пользователей и т. Д., Потому что все глубоко вложено.Поэтому я не хочу получать другие данные и хочу выбрать только несколько свойств из .Include("UserOrganizations.Organization")
.Как мне этого добиться?
Обратите внимание, что я не хочу писать весь запрос как оператор выбора, потому что у меня есть много других полезных вещей, которые я удалил для краткости, поэтому ручное сопоставление было бы громоздким.Мне просто нужно убедиться, что .Include("UserOrganizations.Organization")
не извлекает также вложенные данные или если я могу просто выбрать, какие свойства из Organization
извлечь здесь?
РЕДАКТИРОВАТЬ:
У меня уже есть следующее OnModelCreating
:
modelBuilder.Entity<UserOrganization>(uo =>
{
uo.HasKey(k => new { k.UserId, k.OrganizationId });
uo.HasOne(u => u.User)
.WithMany(o => o.UserOrganizations)
.HasForeignKey(k => k.UserId);
uo.HasOne(o => o.Organization)
.WithMany(u => u.UserOrganizations)
.HasForeignKey(k => k.OrganizationId);
});
А у моих MyUser
и Organization
сущностей есть следующие свойства:
public class MyUser : IdentityUser
{
// Rest removed for brevity
public ICollection<UserOrganization> UserOrganizations { get; set; } = new List<UserOrganization>();
}
И
public class Organization
{
// Rest removed for brevity
public ICollection<UserOrganization> UserOrganizations { get; set; } = new List<UserOrganization>();
}