sql >> Databasteknik >  >> RDS >> Sqlserver

Entity Framework - One-to-One - ReferentialConstraint mappas till en butiksgenererad kolumn

Enligt konvention representerar EF6 en-till-en-relationerna med den så kallade Shared Primary Key Association , där PK för den beroende enheten också fungerar som FK till huvudenheten.

I ditt fall överväger den Account.Id att vara FK till Customer , och eftersom det är automatiskt genererat får du undantaget i fråga.

Det ytterligare problemet är att EF6 inte stöder en-till-en-relation med explicit FK-egenskap (det finns ingen HasForeignKey flytande API som liknar en-till-många-relationer).

Så du måste ta bort AccountId egenskapen från modellen och lämna endast navigeringsegenskapen. Även om det inte är absolut nödvändigt, skulle det vara bra att följa namnkonventionerna och bara kalla det Account istället för AccountValue .

Med andra ord, ersätt

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

public virtual Customer CustomerValue { get; set; }

med

public virtual Customer Customer { get; set; }

FK-kolumnnamnet kan anges med MapKey flytande API:

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

Och du är klar.

Nu infogar följande korrekt först en ny Customer och sedan ett nytt Account hänvisar till det:

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



  1. Spara tidsstämpel i mysql-tabellen med php

  2. Oracle/SQL - Välj specificerat intervall av sekventiella poster

  3. Hur använder man större än operatorn med datum?

  4. Hur listar man alla platspar med samma yta från tabellen i Oracle?