Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle ODP.Net i EF CodeFirst — błąd zapisu zmian

Pomysł z Attach() metoda polega na tym, że masz jednostkę, o której wiadomo, że znajduje się w bazie danych, ale nie jest śledzona przez ten kontekst, prawda? Moje pytanie do ciebie brzmi, czy wiesz na pewno, że ta rola tutaj:

Role r = new Role { ID = 1, Name = "Members" };

czy coś już istnieje? Jeśli tak nie jest, nie sądzę, że chcesz użyć

ctx.Roles.Attach(r);

raczej piszesz:

ctx.Roles.Add(r);

a potem możesz się odwrócić i pisać

User u = new User {
    Login = login,
    Password = password,
    Status = 1,
};

ctx.Users.Add(u);
u.Roles.Add(r);
ctx.SaveChanges();

Problem w twoim pierwszym przykładzie polega na tym, że ta nowa rola jest naprawdę nowa w bazie danych, więc dołączanie jej nie jest tym, co chcesz zrobić, a raczej chcesz ją dodać.

I pojedyncze wywołanie ctx.SaveChanges() powinno tu działać dobrze.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak radzić sobie z sekundami przestępnymi w Oracle

  2. Jak usunąć „Wybrano X wierszy” w SQLcl i SQL*Plus (Oracle)

  3. Czy istnieje najlepszy sposób na uniknięcie wykonywania procesu więcej niż raz w Oracle?

  4. Jakich kryteriów zamówienia używa LITAGG z ORDER BY NULL?

  5. Używanie TUPLES do umieszczania ponad 1000 wpisów w klauzuli SQL IN