public class ExamRepository : IExamRepository
private ExamRepositoryContext _contextfield;
private ExamRepositoryContext _context
if (_contextfield == null)
_contextfield = new ExamRepositoryContext();
public void Add<T>(T entity) where T : DomainEntityBase
_context.Set<T>().Add(entity);
public void AssignExamSourceToReader(int readerId, int examSourceId)
var reader = _context.Readers.Find(readerId);
var examSource = _context.ExamSources.Find(examSourceId);
if (reader != null && examSource != null)
reader.ExamSources.Add(examSource);
public void Delete<T>(T entity) where T : DomainEntityBase
_context.Set<T>().Remove(entity);
public void Delete<T>(int id) where T : DomainEntityBase
var entity = _context.Set<T>().Find(id);
public void Delete<T>(IEnumerable<T> entities) where T : DomainEntityBase
_context.Set<T>().RemoveRange(entities);
public void DeletePatients(IEnumerable<Patient> patients)
_context.Patients.RemoveRange(patients);
public void DeletePatientsWithoutExams()
_context.Database.ExecuteSqlCommand("EXEC pr_DeletePatientsWithoutExams");
public IQueryable<T> Get<T>() where T : DomainEntityBase
return _context.Set<T>();
public IQueryable<ExamNoteDiscrepancy> GetDiscrepancies()
return _context.ExamNoteDiscrepancies
.Include(d => d.ExamNote).Include(d => d.ExamNote.Reader).Include(d => d.ExamNote.Exam).Include(d => d.ExamNote.Exam.ExamSource)
.Include(d => d.DiscrepancyType);
public IQueryable<ExamNote> GetExamNotes()
return _context.ExamNotes
public IQueryable<Patient> GetPatients()
return _context.Patients;
public IQueryable<Reader> GetReaders()
.Include(r => r.ExamSources);
public void RemoveExamSourceFromReader(int readerId, int examSourceId)
var reader = _context.Readers.Find(readerId);
var examSource = _context.ExamSources.Find(examSourceId);
if (reader != null && examSource != null)
reader.ExamSources.Remove(examSource);
public void SaveChanges()
public void Update<T>(T entity) where T : DomainEntityBase
public void Update<T>(IEnumerable<T> entities) where T : DomainEntityBase
foreach (var entity in entities)
Update<T>(entity, false);
public void Update<T>(T entity, bool saveChanges) where T : DomainEntityBase
var attachedEntity = _context.Set<T>().Local.Where(e => e.Id == entity.Id).FirstOrDefault();
if (attachedEntity == null)
attachedEntity = _context.Set<T>().Find(entity.Id);
var attachedEntry = _context.Entry(attachedEntity);
attachedEntry.CurrentValues.SetValues(entity);
catch (DbEntityValidationException ex)
var errorMessages = ex.EntityValidationErrors
.SelectMany(x => x.ValidationErrors)
.Select(x => x.ErrorMessage);
var fullErrorMessage = string.Join(";", errorMessages);
var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage);
throw new DbEntityValidationException(exceptionMessage, ex.EntityValidationErrors);
#region IDisposable Support
private bool disposedValue = false;
protected virtual void Dispose(bool disposing)