Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

ef core one to many relationship throw exception Tidak dapat menambah atau memperbarui baris anak

Anda tidak boleh membuat ShopID nullable jika diperlukan oleh desain.

Masalah yang Anda alami adalah karena Add metode ini juga secara rekursif menandai semua instance entitas yang dapat dijangkau melalui properti navigasi dan saat ini tidak dilacak oleh konteks sebagai Added (yaitu baru).

Ini dapat diselesaikan dengan banyak cara:

  • Mengatur entri entitas ke Added alih-alih Add metode:

    _context.Entry(Product).State = EntityState.Added;
    await _context.SaveChangesAsync();
    
  • Menyetel properti navigasi ke null sebelum memanggil Add :

    Product.Shop = null;
    _context.Products.Add(Product);
    await _context.SaveChangesAsync();
    
  • Melampirkan objek properti navigasi sebelum memanggil Add :

    if (Product.Shop != null) _context.Attach(Product.Shop);
    _context.Products.Add(Product);
    await _context.SaveChangesAsync();
    
  • Menggunakan Update alih-alih Add :

    _context.Products.Update(Product);
    await _context.SaveChangesAsync();
    

Teknik terakhir dijelaskan di Menyimpan Data - Entitas Terputus - Gabungan entitas baru dan yang sudah ada :

Karena ini hanya berfungsi ketika semua entitas menggunakan PK yang dibuat secara otomatis, dan juga menghasilkan pembaruan yang tidak perlu dari entitas terkait, saya tidak merekomendasikannya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Batasan unik tidak dibuat di JPA

  2. Pernyataan kasus di MySQL

  3. Menyimpan kode dalam database SQL dan menjalankannya

  4. Koneksi database dinamis Codeigniter

  5. Cara Memberikan Semua Keistimewaan pada Database di MySQL