Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Entity Framework - One-to-One - ReferentialConstraint được ánh xạ tới một cột do cửa hàng tạo

Theo quy ước, EF6 đại diện cho các mối quan hệ một-một sử dụng cái gọi là Liên kết khóa chính được chia sẻ , trong đó PK của thực thể phụ thuộc cũng đóng vai trò là FK đối với thực thể chính.

Trong trường hợp của bạn, nó coi là Account.Id trở thành FK cho Customer và vì nó được tạo tự động, bạn sẽ có ngoại lệ được đề cập.

Vấn đề bổ sung là EF6 không hỗ trợ mối quan hệ 1-1 với thuộc tính FK rõ ràng (không có HasForeignKey API thông thạo tương tự như mối quan hệ một-nhiều).

Vì vậy, bạn cần xóa AccountId thuộc tính từ mô hình và chỉ để lại thuộc tính điều hướng. Ngoài ra, mặc dù không quá cần thiết, nhưng sẽ rất tốt nếu bạn tuân theo các quy ước đặt tên và chỉ cần gọi nó là Account thay vì AccountValue .

Nói cách khác, thay thế

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

public virtual Customer CustomerValue { get; set; }

với

public virtual Customer Customer { get; set; }

Tên cột FK có thể được chỉ định bằng cách sử dụng MapKey API thông thạo:

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

Và bạn đã hoàn thành.

Bây giờ, phần sau sẽ chèn một cách chính xác trước tiên một Customer mới và sau đó là Account mới tham chiếu nó:

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. Cách trả về số lượng hàng trong kết quả truy vấn trong SQL Server

  2. SQL Server 2008:CHỌN CẬP NHẬT

  3. Bỏ qua mili giây trong một ngày

  4. Ngày định dạng máy chủ SQL DD.MM.YYYY HH:MM:SS

  5. Làm cách nào để bạn đọc cột XML trong SQL Server 2008?