Пример #1
0
    private static async Task <int> InsertRegularsAndVolunteers(
        IImmutableList <CheckInsUpdate> regularPreCheckIns,
        KidsTownContext db
        )
    {
        var kids = regularPreCheckIns
                   .Select(selector: c => c.Kid)
                   .GroupBy(keySelector: p => p.PeopleId).Select(selector: p => p.First())
                   .ToImmutableList();

        var existingPeople = await CommonRepository.GetKidsByPeopleIds(
            db : db,
            peopleIds : kids.Where(predicate : p => p.PeopleId.HasValue)
            .Select(selector : p => p.PeopleId !.Value).ToImmutableList())
                             .ConfigureAwait(continueOnCapturedContext : false);

        var peopleUpdates = kids.Where(
            predicate: p => existingPeople.Select(selector: e => e.PeopleId).Contains(value: p.PeopleId))
                            .ToImmutableList();

        var kidsInserts    = kids.Except(second: peopleUpdates).ToImmutableList();
        var insertedPeople = await InsertPeople(db : db, peopleToInsert : kidsInserts)
                             .ConfigureAwait(continueOnCapturedContext: false);

        var checkIns = regularPreCheckIns
                       .Select(selector: c => MapToAttendance(checkInsUpdate: c,
                                                              people: existingPeople.Union(second: insertedPeople).ToImmutableList()))
                       .ToImmutableList();
        await db.AddRangeAsync(entities : checkIns).ConfigureAwait(continueOnCapturedContext: false);

        return(await db.SaveChangesAsync().ConfigureAwait(continueOnCapturedContext: false));
    }
Пример #2
0
    private static async Task <List <Attendance> > GetAttendances(
        IImmutableList <int> attendanceIds,
        KidsTownContext db)
    {
        var attendances = await db.Attendances.Where(predicate : a =>
                                                     attendanceIds.Contains(a.Id)).ToListAsync().ConfigureAwait(continueOnCapturedContext: false);

        return(attendances);
    }
Пример #3
0
 public static async Task <List <Person> > GetKidsByPeopleIds(
     KidsTownContext db,
     IImmutableList <long> peopleIds
     )
 {
     return(await db.People
            .Where(predicate : p => p.PeopleId.HasValue && peopleIds.Contains(p.PeopleId.Value))
            .Include(navigationPropertyPath: p => p.Kid)
            .ToListAsync()
            .ConfigureAwait(continueOnCapturedContext: false));
 }
Пример #4
0
    private static async Task <IImmutableList <Person> > GetExistingParents(
        IImmutableList <long> peopleIds,
        KidsTownContext db
        )
    {
        var parents = await db.People
                      .Where(predicate : p => p.PeopleId != null && peopleIds.Contains(p.PeopleId.Value))
                      .Include(navigationPropertyPath: p => p.Adult)
                      .Include(navigationPropertyPath: p => p.Family)
                      .ToListAsync()
                      .ConfigureAwait(continueOnCapturedContext: false);

        return(parents.ToImmutableList());
    }
Пример #5
0
    private static async Task <List <Person> > InsertPeople(
        KidsTownContext db,
        IImmutableList <PeopleUpdate> peopleToInsert
        )
    {
        var people = peopleToInsert.Select(selector: MapPerson).ToImmutableList();
        await db.AddRangeAsync(entities : people).ConfigureAwait(continueOnCapturedContext: false);

        await db.SaveChangesAsync().ConfigureAwait(continueOnCapturedContext: false);

        var insertedPeople = await db.People
                             .Where(predicate : p => peopleToInsert.Select(i => i.PeopleId).Contains(p.PeopleId))
                             .ToListAsync().ConfigureAwait(continueOnCapturedContext: false);

        return(insertedPeople);
    }