sql >> Database teknologi >  >> RDS >> Sqlserver

Entity Framework - One-to-One - ReferentialConstraint er knyttet til en butiksgenereret kolonne

Efter konvention repræsenterer EF6 en-til-en-relationerne ved hjælp af den såkaldte Shared Primary Key Association , hvor den afhængige enheds PK også tjener som FK for hovedenheden.

I dit tilfælde betragter den Account.Id at være FK til Customer , og da det er automatisk genereret, får du den pågældende undtagelse.

Det yderligere problem er, at EF6 ikke understøtter et-til-en-forhold med eksplicit FK-egenskab (der er ingen HasForeignKey flydende API, der ligner en-til-mange-forhold).

Så du skal fjerne AccountId egenskab fra modellen og lad kun navigationsegenskaben stå. Også selvom det ikke er stærkt nødvendigt, ville det være godt at følge navnekonventionerne og bare kalde det Account i stedet for AccountValue .

Med andre ord, udskift

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

public virtual Customer CustomerValue { get; set; }

med

public virtual Customer Customer { get; set; }

FK-kolonnenavnet kan angives ved hjælp af MapKey flydende API:

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

Og du er færdig.

Nu indsætter følgende korrekt først en ny Customer og derefter en ny Account henviser til det:

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



  1. MySQL på dubletnøgleopdatering

  2. Hvordan kombinerer man flere dato-mellem-søgninger med CrudRepository of Spring Data JPA?

  3. MySQL-ydelse:MySQL vs. MariaDB

  4. Hvordan får man id'et for den sidste indsatte række ved hjælp af forberedt erklæring?