Método de patrón de repositorio Implementación con marco de entidades y C # -- # campo con linq campo con entity-framework camp codereview Relacionados El problema

Repository pattern method implementation with entity framework and C#


4
vote

problema

Español

Tengo dos entidades en mi base de datos: Employee y Shift . Quiero implementar un método de patrón de repositorio C #, que dio dos ID de 9988776655544336 , swaps los dos workshift s para dos empleados.

LIMITACIÓN: Un empleado no puede trabajar múltiples turnos a la vez.

Modelos

  9988776655544338  

Repositorio

  public class WorkShiftRepository : RepositoryBase<WorkShift>, IWorkShiftRepository {     private readonly ShiftContext _databaseContext;      public WorkShiftRepository(ShiftContext context) : base(context)     {         _databaseContext = context;     }      private async Task<bool> Overlaps(WorkShift shift, int employeeId)     {         return await _databaseContext.Shifts.Where(u => u.EmployeeID == employeeId).             Where((s => shift.ShiftStart < s.ShiftEnd && s.ShiftStart < shift.ShiftEnd)).AnyAsync();     }      public async Task<int> SwapShifts(int shiftIdA, int shiftIdB)     {         var result = 0;         // Load shifts into memory         var shiftA = await _databaseContext.Shifts.SingleAsync(s => s.ID == shiftIdA);         var shiftB = await _databaseContext.Shifts.SingleAsync(s => s.ID == shiftIdB);         int shiftAid = shiftA.EmployeeID;          // Swap Employee IDs         shiftA.EmployeeID = shiftB.EmployeeID;         shiftB.EmployeeID = shiftAid;          // Check if the swapped shifts has any overlaps on db         if (await Overlaps(shiftA, shiftA.EmployeeID) || await Overlaps(shiftB, shiftB.EmployeeID))             throw new Exception("ShiftsOverlap");          // update in memory         _databaseContext.Shifts.Update(shiftA);         _databaseContext.Shifts.Update(shiftB);          // Write changes to DB         result = await _databaseContext.SaveChangesAsync();          return result;     } }   

El código compila y cumple con las limitaciones. Pero busco consejos y trucos para que el código sea más limpio y / o más eficiente.

Original en ingles

I have two entities in my database: Employee and Shift. I want to implement a C# repository pattern method, that given two workshift IDs, swaps the two workshifts for two employees.

Limitation: one employee cannot work multiple shifts at a time.

Models

public class Employee {     public int ID { get; set; }     public string Firstname { get; set; }     public string Lastname { get; set; }     public string Email { get; set; } }  public class WorkShift {     public int ID { get; set; }     public int EmployeeID { get; set; }     public DateTime ShiftStart { get; set; }     public DateTime ShiftEnd { get; set; } } 

Repository

public class WorkShiftRepository : RepositoryBase<WorkShift>, IWorkShiftRepository {     private readonly ShiftContext _databaseContext;      public WorkShiftRepository(ShiftContext context) : base(context)     {         _databaseContext = context;     }      private async Task<bool> Overlaps(WorkShift shift, int employeeId)     {         return await _databaseContext.Shifts.Where(u => u.EmployeeID == employeeId).             Where((s => shift.ShiftStart < s.ShiftEnd && s.ShiftStart < shift.ShiftEnd)).AnyAsync();     }      public async Task<int> SwapShifts(int shiftIdA, int shiftIdB)     {         var result = 0;         // Load shifts into memory         var shiftA = await _databaseContext.Shifts.SingleAsync(s => s.ID == shiftIdA);         var shiftB = await _databaseContext.Shifts.SingleAsync(s => s.ID == shiftIdB);         int shiftAid = shiftA.EmployeeID;          // Swap Employee IDs         shiftA.EmployeeID = shiftB.EmployeeID;         shiftB.EmployeeID = shiftAid;          // Check if the swapped shifts has any overlaps on db         if (await Overlaps(shiftA, shiftA.EmployeeID) || await Overlaps(shiftB, shiftB.EmployeeID))             throw new Exception("ShiftsOverlap");          // update in memory         _databaseContext.Shifts.Update(shiftA);         _databaseContext.Shifts.Update(shiftB);          // Write changes to DB         result = await _databaseContext.SaveChangesAsync();          return result;     } } 

The code compiles and it meets the limitations. But I am looking for tips and tricks to make the code cleaner and/or more efficient.

        
     
     

Lista de respuestas


Relacionados problema

4  Variable dinámica: ¿es la mejor manera de asignar dinámicamente?  ( Dynamic variable is that best way to dynamically assign ) 
Normalmente, podría declarar la variable 'correo electrónico' como la clase base para el correo electrónico y el amplificador; Emailutbound, luego lanza a la ...

1  Controlador con templateService  ( Controller with templateservice ) 
Estoy trabajando en mi proyecto de API web de plantilla. Sólo quiero escuchar cualquier sugerencia sobre cómo mejorar este código. Escuché que el patrón de ...

1  Serializar las propiedades de una entidad marco de entidad a los campos de datos y de vuelta  ( Serialize the properties of an entity framework entity to data fields and back ) 
Estoy tratando de escribir código para convertir las propiedades de una entidad marco de entidad a las cuerdas y la espalda. Aquí está el código hasta ahora...

1  Retroalimentación y consejos sobre mi arquitectura de aplicación de N-Tier  ( Feedback and advice on my n tier application architecture ) 
Estoy trabajando en una aplicación que utilizará un enfoque N-TIERED. Agradecería cualquier comentario y consejos sobre mi arquitectura antes de continuar. ...

11  Manera eficiente de tratar con el mantenimiento de muchos: muchas relaciones en el código EF: primero  ( Efficient way to deal with maintaining manymany relationships in ef code first ) 
Tengo todo esto trabajando, pero parece estar bastante largo, y pensé que publicaría aquí y vería si lo estoy haciendo mal ... Tengo una relación M: M entre...

3  Master Detalle Insertar en Entity Framework 6 Base de datos Primer MVC 5  ( Master detail insert in entity framework 6 database first mvc 5 ) 
Tengo un DB con una tabla maestra llamada "Facturas" y otra tabla de detalles "Facturas_Detalle". Me gustaría insertarlos, por lo que esta es una "base de dat...

4  ¿Debo crear dos servicios separados y luego combinarlos o tener uno grande?  ( Should i create two seperate services and then combine them or have one large ) 
Básicamente, tengo dos mesas, campañas y campañas separadas. Se relacionan a través de campañas. Quiero un servicio que pueda manejar ambos al mismo tiempo, y...

4  Clase de cliente WCF  ( Wcf client class ) 
La clase es responsable de envolver las solicitudes a un servicio de datos WCF, que ordena el código de llamadas. Las transacciones son compatibles implícitam...

4  Insertar objeto de modelo de manera efectiva usando la entidad Framework  ( Insert model object effectively using entity framwork ) 
Tengo una aplicación MVVM de WPF. Tengo un modelo de cliente que es generado por un marco de entidad (primer enfoque de la base de datos) y un 99887766555443...

6  Mejorar el tiempo que se tarda en insertar miles de registros utilizando el marco de entidades  ( Improving time it takes to insert thousands of records using entity framework ) 
Tengo una tarea en mi programa que está insertando miles (94,953 en una instancia y 6.930 en otro) de registros en mi base de datos utilizando el marco de ent...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos