Pobranie aktualnego ID obiektu przy tworzeniu drugiego obiektu bez wywołania metody SaveChanges()

0

W metodzie tworze dwa nowe obiekty, które bd mi reprezentowaly wpisy w dwoch roznych tabelach. Z czego w drugim obiekcie potrzebuje ID pierwszego obiektu. Niestety nie jestem w stanie pobrac aktualnego ID z tego wzgledu, ze wpis z 1 obiektu zostanie dodany do tabeli dopiero gdy wywolam metode SaveChanges(). Jest jakis sposób by drugi obiekt dostał aktualne ID (Ktore zostanie stworzone ale jeszcze przed wywolaniem metody SaveChanges) ?

0

zadeklaruj w drugim obiekcie virtualne property typu pierwszego obiektu.
np tak:
public class ob1
{
public jakies pola {get; set;}
}
public class ob2
{
public virtual ob1 obiekt1 {get; set;}
}

i potem po utworzeniu drugiego obiektu do tego pola przypisujesz pierwszy

tutaj masz przykład relacji w entity framework
https://www.infragistics.com/community/blogs/dhananjay_kumar/archive/2015/10/21/how-to-create-relationships-between-entities-in-the-entity-framework-code-first-approach.aspx

0

Bardzo dziękuje :)

1

Niestety nie dodało mi:

 foreach (var koszyk in koszykItems)
            {
                var platnoscPosrednia = new PlatnoscPosrednia
                {
                    RezerwacjaID= rezerwacja.ID,
                    Rezerwacja = rezerwacja,
                    Platnosc.ID= platnosc.ID,
                };
                _db.PlatnoscPosrednia.Add(platnoscPosrednia);

                rezerwacja.PlatnoscPosrednia.Add(platnoscPosrednia );
                rezerwacja.PlatnoscPosredniaID = platnoscPosrednia.ID;

            }
rezerwacja.UzytkownikID = uzytkownikID;
rezerwacja.DataZlozeniaRezerwacji = DateTime.Now
_db.Rezerwacje.Add(rezerwacja);
_db.SaveChanges()

i teraz dostaje wpis do rezerwacji taki:
RezerwacjaID | PlatnoscPosredniaID | UzytkownikID | DataZlozeniaRezerwacji
10 | 0 | 32 | 30-11-2017

Ciągle mam to 0, natomiast gdy wyciagne dane z tabeli PlatnoscPosrednia to mam prawidłowy wpis w bazie. Niestety w mojej glownej tabeli nie mam. Czy ma ktoś pomysł jak to zrobić ?:)

0

Chodzi ci o to, że wpis w tabeli pośredniej dodał się z prawidłowym ID rezerwacji, natomiast wpis w tabeli Rezerwacja, a dokładniej pole "PlatnoscPosredniaID" dostaje nieprawidłowa wartość pomimo, że w petli dodajesz obiekty PlatnoscPosrednia do swojej własciwosci.

Wpisy w bazie zostaną dodane dopiero po wywołaniu metody SaveChanges(). Chociaz nie wiem czy ci to coś pomoże, lepiej niech ktoś bardziej doświadczony się wypowie.

0

Tak dodam ze wpis w tabeli PaymentPosrednia ma wartosc klucza rezerwacji zgodny z nowym wpisem rezerwacji. Natomiast ten wpis Rezerwacja nie ma prawidlowej wartosci klucz PaymentPosrednia. Najpierw tworze pusty obiekt rezerwacja na samym początku czego wczesniej nie wspomniałem.

0

Coś przekombinowałeś. Pokaż model (klasy).
Jeśli masz w modelu n-n Rezerwacja z Platnosc to
Rezerwacja ma mieć public virtual ICollection<Płatnosc>... a
Płatnosc ma mieć public virtual ICollection<Rezerwacja>...

Wszystko co więcej jest ode złego pochodzi.

Tu masz przykład http://www.entityframeworktutorial.net/code-first/configure-many-to-many-relationship-in-code-first.aspx

Potem dodajesz rezerwacja.Platnosci.Add(new Platnosc...) albo Platnosc.Rezerwacje.Add(new Rezerwaca...) i po zapisaniu do bazy powinno się wszystko automagicznie poustawiać. Bez jawnych odwołań do pól kluczy (...ID) bo one przed zapisaniem do db nie mają wartości (chyba, że dasz klucze typu GUID ale to inny temat).

Jeśli z jakichś kosmicznych powodów musisz to robić tak jak robisz to

  1. Tworzysz Płatność
  2. Tworzysz Rezerwacje
  3. Zapisujesz -> db_save... - po zapisaniu te obiekty będą już miały wartości ID
    4, Tworzysz obiekt PlatoscPosrednia i ustawiasz ID płatności i rezerwacji.
  4. Ponownie db.Save...

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