示例#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 <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);
    }