Как сопоставить объекты значений в dapperC#

Место общения программистов C#
Ответить
Anonymous
 Как сопоставить объекты значений в dapper

Сообщение Anonymous »

у меня есть следующий объект

Код: Выделить всё

using MedRaise.Domain.Enums;

namespace MedRaise.Domain.Entities;

public class Appointment : Entity
{
private Guid _clinicId;
private DateTime _date;
private Guid _doctorId;
private Guid _patientId;

public Appointment()
{
}

public Appointment(Guid id, DateTime date, Guid patientId, Guid doctorId, Guid clinicId,
AppointmentStatus appointmentStatus)
{
_date = date;
_patientId = patientId;
_doctorId = doctorId;
_clinicId = clinicId;
AppointmentStatus = appointmentStatus;
}

public DateTime Date
{
get => _date;
set
{
_date = value;
}
}

public Guid PatientId
{
get => _patientId;
set
{
if (value == Guid.Empty) throw new ArgumentException($"The {nameof(PatientId)} is required");

_patientId = value;
}
}

public Patient? Patient { get; set; }

public Guid DoctorId
{
get => _doctorId;
set
{
if (value == Guid.Empty) throw new ArgumentException($"The {nameof(DoctorId)} is required");

_doctorId = value;
}
}

public Doctor? Doctor { get; set; }

public Guid ClinicId
{
get => _clinicId;
set
{
if (value == Guid.Empty) throw new ArgumentException($"The {nameof(ClinicId)} is required");

_clinicId = value;
}
}

public Clinic? Clinic { get; set; }
public AppointmentStatus AppointmentStatus { get; set; }
}
И 3 объекта значений

Код: Выделить всё

namespace MedRaise.Domain.ValueObjects;
public class Address : ValueObject
{
public string Country { get; set; }
public string City { get; set; }
public string Street { get; set; }
public string Apartments { get; set; }
public string PostalCode { get; set; }

public Address() {}
public Address(string country, string city, string street, string apartments, string postalCode)
{
if (string.IsNullOrWhiteSpace(country))
{
throw new ArgumentException("Country cannot be empty", nameof(country));
}
if (string.IsNullOrWhiteSpace(city))
{
throw new ArgumentException("City cannot be empty", nameof(city));
}
if (string.IsNullOrWhiteSpace(street))
{
throw new ArgumentException("Street cannot be empty", nameof(street));
}
if (string.IsNullOrWhiteSpace(apartments))
{
throw new ArgumentException("Apartments cannot be empty", nameof(apartments));
}
if (string.IsNullOrWhiteSpace(postalCode))
{
throw new ArgumentException("Postal code cannot be empty", nameof(postalCode));
}

Country = country;
City = city;
Street = street;
Apartments = apartments;
PostalCode = postalCode;
}

protected override IEnumerable GetEqualityComponents()
{
yield return Country;
yield return City;
yield return Street;
yield return Apartments;
yield return PostalCode;
}
}

Код: Выделить всё

namespace MedRaise.Domain.ValueObjects;

public class FullName : ValueObject
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Patronymic { get; set; }

public FullName() {}
public FullName(string firstname, string lastname, string patronymic)
{
FirstName = firstname;
LastName = lastname;
Patronymic = patronymic;
}
protected override IEnumerable GetEqualityComponents()
{
yield return FirstName;
yield return LastName;
yield return Patronymic;
}
}

using MedRaise.Domain.Enums;

Код: Выделить всё

namespace MedRaise.Domain.ValueObjects;

public class ContactInformation : ValueObject
{
public string? Email { get; set; }
public string? Phone { get; set;  }

public ContactInformation() {}
public ContactInformation(string? email, string? phone)
{
Email = email;
Phone = phone;
}
protected override IEnumerable GetEqualityComponents()
{
yield return Email;
yield return Phone;
}
}
Мне нужна назначенная встреча с пациентами....У меня есть следующий метод, но он не работает, я получу встречу с пустыми полями в свойствах пациента, и я не могу понять , почему....Чат GPT мне не помог

Код: Выделить всё

    public async Task GetByIdWithPatientDoctorClinic(Guid id)
{
await using var connection = new NpgsqlConnection(connectionString);
await connection.OpenAsync();
const string query = """
SELECT
a.*,
p.id AS PatientId, p.dob as Dob,
p.address_country AS Country,
p.address_city AS City,
p.address_street AS Street,
p.address_apartments AS Apartments,
p.sex
FROM
appointments a
INNER JOIN
patients p ON a.patientid = p.id
WHERE
a.id = @Id
""";

var appointments =
await connection.QueryAsync(
query,
(appointment, patient) =>
{
appointment.Patient = patient;
return appointment;
},
new { Id = id },
splitOn: "PatientId");

return appointments.FirstOrDefault();
}
Я пытался сделать это сам, но это не сработало.... Может кто-нибудь помочь мне решить эту проблему, я работаю с dapper второй раз

Подробнее здесь: https://stackoverflow.com/questions/786 ... -in-dapper
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»