sql >> Databáze >  >> RDS >> Sqlserver

Entity Framework – One-to-One – ReferentialConstraint je mapován na sloupec generovaný obchodem

Podle konvence EF6 představuje vztahy jedna ku jedné pomocí takzvaného Přidružení sdíleného primárního klíče , kde PK závislé osoby slouží zároveň jako FK hlavní osobě.

Ve vašem případě bere v úvahu Account.Id být FK pro Customer , a protože se generuje automaticky, dostanete dotyčnou výjimku.

Dalším problémem je, že EF6 nepodporuje vztah jedna ku jedné s explicitní vlastností FK (neexistuje žádný HasForeignKey plynulé API podobné vztahům one-to-many).

Musíte tedy odstranit AccountId vlastnost z modelu a ponechat pouze vlastnost navigace. Také, i když to není nezbytně nutné, bylo by dobré dodržovat konvence pojmenování a nazvat to Account spíše než AccountValue .

Jinými slovy nahradit

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

public virtual Customer CustomerValue { get; set; }

s

public virtual Customer Customer { get; set; }

Název sloupce FK lze zadat pomocí MapKey plynulé API:

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

A máte hotovo.

Nyní následující správně nejprve vloží nový Customer a poté nový Account odkazující na to:

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



  1. MySQL - Jak získat výsledky vyhledávání s přesnou relevanci

  2. PHP MYSQL - Rozdíl mezi 127.0.0.1 a localhostem

  3. Výpočet průměrných hodnot za úseky data/času

  4. Jak ručně zkomprimovat a opravit databázi v Accessu 2016