sql >> Database >  >> RDS >> Sqlserver

Entity Framework - Eén-op-één - ReferentialConstraint is toegewezen aan een door de winkel gegenereerde kolom

Volgens afspraak vertegenwoordigt EF6 de één-op-één relaties met behulp van de zogenaamde Associatie gedeelde primaire sleutel , waarbij de PK van de afhankelijke entiteit ook dient als FK voor de hoofdentiteit.

In uw geval beschouwt het Account.Id om de FK te zijn voor Customer , en aangezien het automatisch wordt gegenereerd, krijg je de betreffende uitzondering.

Het bijkomende probleem is dat EF6 geen één-op-één-relatie met expliciete FK-eigenschap ondersteunt (er is geen HasForeignKey vloeiende API vergelijkbaar met een-op-veel-relaties).

U moet dus de AccountId . verwijderen eigenschap uit het model en laat alleen de eigenschap navigatie. Ook, hoewel niet strikt noodzakelijk, zou het goed zijn om de naamgevingsconventies te volgen en het gewoon Account te noemen. in plaats van AccountValue .

Met andere woorden, vervang

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

public virtual Customer CustomerValue { get; set; }

met

public virtual Customer Customer { get; set; }

De naam van de FK-kolom kan worden opgegeven met de MapKey vloeiende API:

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

En je bent klaar.

Nu voegt het volgende correct eerst een nieuwe Customer in en dan een nieuw Account ernaar verwijzen:

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



  1. Hoe combineer ik zowel mijn top 5-salarissen als mijn onderste 5 om in Oracle weer te geven?

  2. Hoe een mysql-gebeurtenis na een bepaalde periode te activeren?

  3. Een ODBC-gekoppelde server maken zonder een gegevensbron te configureren

  4. Een Excel-blad uploaden en de gegevens importeren in de SQL Server-database