Существует несколько возможных решений, и это может зависеть от вашего предпочтения добавления такого рода бизнес-логики в код вашего приложения или в SQL (например, в качестве триггера). Я бы лично порекомендовал первое, так как это требование со временем может эволюционировать и повлиять на другие компоненты вашей бизнес-логики.
Я сделал несколько предположений: 1) что вы используете Entity Framework, и 2) назначения не перекрываются, а EndDate уникален. Если это так, вы можете реализовать эту функцию, используя логику, подобную следующей:
public class AppointmentService
{
private readonly MyContext _db;
public AppointmentService(MyContext db) => _db = db;
public void AddAppointment(InfoAppointments appointment)
{
// Update the previous appointment's end date
var previousAppointment = _db.Appointments
.OrderByDescending(e => e.EndDate)
.FirstOrDefault();
if (previousAppointment != null)
{
previousAppointment.EndDate = appointment.StartDate;
}
// Add the new appointment
_db.Appointments.Add(appointment);
_db.SaveChanges();
}
}
Еще один комментарий: исходя из вашего объяснения, кажется, что EndDate должен по умолчанию иметь значение null, но вы использовали ненулевой тип. Я бы изменил это на следующее:
public DateTime? EndDate { get; set; }