Aktywne Wpisy
wapiti +19
Do całej tej dyskusji na temat KPO warto dodać, że Konfederacja jako jedyna partia nigdy nie chciała tych pieniędzy. Ponad 3 lata temu, gdy temat dopiero pojawił się w opinii publicznej, nikt nie podnosił, że jest to dług, który przyjdzie nam wszystkim spłacać. W rzeczywistości zaczęliśmy go spłacać jeszcze zanim w ogóle otrzymaliśmy te środki. Już wtedy wiedzieli, że pieniądze zostaną odblokowane dopiero po zmianie rządu, co rzeczywiście miało miejsce. Doskonale też


jmuhha +5
Czyli to działało tak, że:
-kupil spolke ktoś za 100k,
-dotacji dostał 500k,
Czyli jest 400k na plusie za państwowe moje i twoje pieniądze?
#kpo
-kupil spolke ktoś za 100k,
-dotacji dostał 500k,
Czyli jest 400k na plusie za państwowe moje i twoje pieniądze?
#kpo





To już dzisiaj moje drugie pytanie do ef ale tym razem już sam sobie nie odpowiem ( ͡° ͜ʖ ͡°).
Mam takie kod który dodaje record do bazy (ef w trybie disconnected):
using (var context = new StoreDbContext())
{
using (var transaction = context.Database.BeginTransaction())
{
try
{
context.Customers.Attach(order.Customer);
foreach (var productOrder in order.Products)
{
context.Products.Attach(productOrder.Product);
context.ProductOrders.Add(productOrder);
}
context.Orders.Add(order);
context.SaveChanges();
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
throw ex;
}
}
}
Wyjaśnienie: Order zawiera referencje do Customer i listy ProductOrder. Część pogrubioną (petla foreach) sobie darujmy bo tu jest ok. Dodaje do kontekstu (przez Attach) order.Customer bo nie chcę żeby Customer był dodany do bazy jako nowy record - ma to byc referencja do istniejącego recordu.
Problem jest taki, że wywala mi takie błąd na metodzie SaveChanges() :
Czyli próbuje dodać Customer jako nowy record. Dlaczego?
Żeby było śmieszniej to gdy puszcze powyższy kod dwa razy to za drugim razem już zapisze tak jak ma być:
for (int i = 0; i < 2; ++i)
{
using (var context = new StoreDbContext())
{
using (var transaction = context.Database.BeginTransaction())
{
try
{
context.Customers.Attach(order.Customer);
foreach (var productOrder in order.Products)
{
context.Products.Attach(productOrder.Product);
context.ProductOrders.Add(productOrder);
}
context.Orders.Add(order);
context.SaveChanges();
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
continue;
throw ex;
}
}
}
}
Czego tylko za pierwszym podejściem próbuje zrobić inserta na Customer a za drugim już zapisuje normalnie?
Pierwszy kawałek kodu:
źródło: comment_YDOAHyL6xEL1j5crJH8ZipsuS5rTVf2E.jpg
Pobierzźródło: comment_z1hvxxYO3pWYIXRpFfbi3zRJ9QhhvelH.jpg
PobierzKomentarz usunięty przez autora
context.Entry(nazwaObiektu).State = EntityState.Modified;
Mam takie kod który dodaje record do bazy (ef w trybie disconnected):
wklejony kod z mojego pierwszego komentarza
Działam w trybie ef disconnected. Mam zdefiniowene Entity o nazwie Order i w nim mam referencje do kolejnego entity Customer.
Gdzieś tam w viewModelu tworze nowy Order (np order = new Order() )
potem przypisuje do niego Customera (np order.Customer =
public virtual Customer Customer;masz teżpublic int CustomerId. Jeśli tak jest to przy dodawaniu do contextu nowego Order w polu Customer daj nulla, przypisz CustomerId (które przecież znasz).kombinujesz jak koń pod górkę. Nie wspomne już o tym, ze pomimo jakis 4 lat doswiadczenia z EF nie spotkalem sie ze sformuowaniem "ef disconnected". wtf?
Masz encje A ktora posiada Encje B czy tam wiele encji, masz klucze do nich, czy też pola wirtualne, dodajesz do danej kolekcji (lub przypsiujesz dane cale pole virtualne, albo samo id) a nie robisz jakies atache i inne
Faktycznie teraz chodzi elegancko. Teraz wiem, że wszystkie referencje powinny mieć zdefiniowany też klucz bo bez klucza trzeba się bawić w takie dołanczanie do konktekstu