EF Core, zapis i zwrot do użytkownika wyniku.

0

Cześć wszystkim.

Przy zapisie jak i aktualizacji danych w ef core zwracam do w odpowiedzi do usera zapisane dane, problemem jest jeśli obiekt zawiera inny obiekt. Do rzeczy
Mam model danych jak niżej:

public class Person
{
  public int Id { get; set; }
  public string Name { get; set; }
  public int AddressId { get; set; }
  public virtual Address Address { get; set; }
}
 
public class Address
{
  public int Id { get; set; }
  public string FullAddress { get; set; }
}

Zapisuję go bazy danych, zapisany wynik zwracam w odpowiedzi do użytkownika

var person = new Person()
{
	Id = model.Id,
	Name = model.Name,
	AddressId = model.AddressId,
}
_context.Person.Add(person);
_context.SaveChanges();
return Ok(person);

W odpowiedzi są dane użytkownika, ale pole Address ma wartość null. Aby to obejść przed odpowiedzią wykonuję odczyt nowo utworzonego rekordu z uwzględnieniem właściwości Address i zwracam

int id = person.Id
person = _context.Person
                .Include(p => p.Address)
                .Where(p => p.Id == id).FirstOrDefault();
return Ok(person);

Tak samo przy aktualizacji danych. Czy można bezpośrednio po zapisaniu otrzymać z bazy kompletny obiekt zawierający wszystkie pola obiektu Person jak i pola we właściwości Address ?
Trochę by to uprościło kod.

0

Daj includa
edit
tu masz opisane

Dopiero zauważyłem, że go masz

Daj w modelu nad Address

[JsonIgnore]
public virtual Address Address { get; set; }
0

JsonIgnore działa odwrotnie niż chciałem, pole całkowicie znikło. A ja chcę by było i było wypełnione danymi w obiekcie Address.
Dokładnie tak jak w przypadku odczytu z Inlude(). Potrzebuję tych danych do wyświetlenia danych adresowych w widoku. O ile jest możliwość to chciałbym od razu otrzymać poprawne kompletne dane, bez dodatkowych zapytań do bazy.

2
marcin82w napisał(a):

chciałbym od razu otrzymać poprawne kompletne dane, bez dodatkowych zapytań do bazy.

O takie cuda to pewnie wszyscy by chcieli

Swoją drogą tworzysz nowy Person i jego address już jest wcześniej w bazie?

_context.Entry(person).Reference(x=>x.Address).Load();
0
szydlak napisał(a):

Swoją drogą tworzysz nowy Person i jego address już jest wcześniej w bazie?

W tym co tu robię tak, trochę logika myli ale tak jest, mam bazę adresową i użytkowników, którym przypisuję już zdefiniowany adres.
Docelowo będzie trochę inaczej ale to w odległej przyszłości.

szydlak napisał(a):
_context.Entry(person).Reference(x=>x.Address).Load();

I to jest to co chciałem. Konieczne były małe zmiany w startup.cs, ale w efekcie mam oczekiwany efekt.

1 użytkowników online, w tym zalogowanych: 0, gości: 1