Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Entity Framework - One-to-One - ReferentialConstraint dipetakan ke kolom yang dibuat toko

Dengan konvensi EF6 mewakili hubungan satu-ke-satu menggunakan apa yang disebut Asosiasi Kunci Utama Bersama , di mana PK entitas dependen juga berfungsi sebagai FK entitas utama.

Dalam kasus Anda, ini mempertimbangkan Account.Id menjadi FK untuk Customer , dan karena dibuat secara otomatis, Anda mendapatkan pengecualian yang dimaksud.

Masalah tambahan adalah bahwa EF6 tidak mendukung hubungan satu-ke-satu dengan properti FK eksplisit (tidak ada HasForeignKey API lancar mirip dengan hubungan satu-ke-banyak).

Jadi, Anda perlu menghapus AccountId properti dari model dan hanya menyisakan properti navigasi. Juga, meskipun tidak terlalu diperlukan, akan lebih baik untuk mengikuti konvensi penamaan dan sebut saja Account daripada AccountValue .

Dengan kata lain, ganti

[Column("CUSTOMER_ID")]
public int? CustomerId { get; set; }

public virtual Customer CustomerValue { get; set; }

dengan

public virtual Customer Customer { get; set; }

Nama kolom FK dapat ditentukan menggunakan MapKey API lancar:

modelBuilder.Entity<Customer>()
    .HasRequired(c => c.Account)
    .WithRequiredPrincipal(a => a.Customer)
    .Map(m => m.MapKey("CUSTOMER_ID")); // <--

Dan Anda selesai.

Sekarang yang berikut ini dengan benar memasukkan Customer baru terlebih dahulu lalu Account baru referensi itu:

var account = new Account
{
    AccountNumber = "00123456",
    Customer = new Customer { FirstName = "Joe" }
};
db.Accounts.Add(account);
db.SaveChanges();



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menghubungkan Server Bastion ke Server PostgreSQL melalui SSH Tunnel

  2. Ubah Time Zone Offset pada nilai datetimeoffset di SQL Server (T-SQL)

  3. Bagaimana cara menghindari kesalahan pembagian dengan nol dalam SQL?

  4. Bagaimana saya bisa menyorot sebuah kata dalam tampilan kisi?

  5. Sisipkan SQL Server jika tidak ada