Find the version for Entity Framework Core here
https://github.com/OfferingSolutions/Entity-Framework-Core-Generic-Repository
Offering you a complete abstraction of the UnitOfWork-Pattern with the basic CRUD-Operations, the Repository Pattern and extended functions like CustomRepositores all in one small lib. Made for the Entity Framework.
See the Sample-Project how this works.
See Nuget to load this package:
https://www.nuget.org/packages/OfferingSolutions.UnitOfWork.Structure/
Install-Package OfferingSolutions.UnitOfWork.Structure
Have fun. Hope this helps :)
using (IOsUnitOfWorkContext unitOfWorkContext = new OsUnitOfWorkContext(new DatabaseContext())) { Person person = new Person() { Age = 28, Name = "Fabian" }; //Adding a new Entity, for example "Person" unitOfWorkContext.Add(person); //Savechanges unitOfWorkContext.Save(); //or... unitOfWorkContext.SaveASync(); // Get all Persons List allPersons = unitOfWorkContext.GetAll().ToList(); // Get all Persons with the age of 35 List allPersonsOnAge35 = unitOfWorkContext.GetAll(x => x.Age == 35).ToList(); // Get all Persons with the age of 35 ordered by Name List allPersonsOnAge35Ordered = unitOfWorkContext.GetAll(x => x.Age == 35, orderBy: q => q.OrderBy(d => d.Name)).ToList(); // Get all Persons with the age of 35 ordered by Name and include its properties List allPersonsOnAge35OrderedAndWithThings = unitOfWorkContext.GetAll( x => x.Age == 35, orderBy: q => q.OrderBy(d => d.Name), includeProperties: "Things").ToList(); // Get all Persons and include its properties List allPersonsWithThings = unitOfWorkContext.GetAll(includeProperties: "Things").ToList(); // Find a single Person with a specific name Person findBy = unitOfWorkContext.GetSingle(x => x.Name == "Fabian"); // Find a single Person with a specific name and include its siblings Person findByWithThings = unitOfWorkContext.GetSingle(x => x.Name == "Fabian", includeProperties: "Things"); // Find a person by id unitOfWorkContext.GetSingleById(6); //Update an existing person unitOfWorkContext.Update(person); //Add or Update a Person unitOfWorkContext.AddOrUpdate(person); //Deleting a Person by Id or by entity //unitOfWorkContext.Delete(person.Id); unitOfWorkContext.Delete(person); }
or you can make repositories for each entity
DatabaseContext databaseContext = new DatabaseContext(); IPersonRepository personRepository = new PersonRepository(databaseContext); IThingRepository thingRepository = new ThingRepository(databaseContext); personRepository.Add(new Person()); thingRepository.Add(new Thing()); personRepository.Save(); List persons = await personRepository.GetAllASync().Result.ToListAsync(); Console.WriteLine(persons.Count); personRepository.MyNewFunction(6); await personRepository.SaveASync(); List allASync = await personRepository.GetAllASync().Result.ToListAsync(); thingRepository.Dispose(); personRepository.Dispose();