2013-03-21 3 views
5

Ich habe alle Google- und SO-Seiten über Personen gelesen, die eine Eins-zu-Eins-Beziehung in EF aufbauen, aber es funktioniert einfach nicht für mich.Wie stelle ich eine Eins-zu-Eins-Beziehung mit Entity Framework Code First her?

Hier ist mein Modell:

Konto:

public int Id {get; set;} 
public virtual AccountConfig AccountConfig {get; set;} 

Konto Karte:

HasKey(t => t.Id); 
HasRequired(t => t.AccountConfig) 
    .WithOptional(); 

Konto Config:

public int Id {get; set;} 
public int AccountId {get; set;} 
public virtual Account Account {get; set;} 

Konto Config Karte:

HasKey(t => t.Id); 
HasRequired(t => t.Account) 
    .WithOptional(t => t.AccountConfig); 

Wenn er ausgeführt wird, die AccountConfig Eigenschaft auf Account ist NULL und die Account Eigenschaft auf AccountConfig ist eine falsche Aufzeichnung (zufällig, die abgerufenen Account.Id ist das gleiche wie die AccountConfig.Id, aber ich weiß nicht, ob das etwas bedeutet,).

In der Datenbank, die Account Tabelle nicht einen Verweis auf die AccountConfig Datensatz aber die AccountConfig Tabelle hat einen Verweis auf die Account Aufzeichnung der AccountId Spalte.

Das Endergebnis wäre für mich einen Hinweis auf die AccountConfig von Account zu haben, und (wenn möglich), einen Verweis auf Account von AccountConfig.

Antwort

9

Mit EF werden Eins-zu-eins-Beziehungen nur für Tabellen unterstützt, die einen Primärschlüssel verwenden. Ihre Tabelle AccountConfig hat einen eigenen Primärschlüssel und einen Fremdschlüssel für Account. EF unterstützt nur eine Eins-zu-viele-Beziehung mit dieser Konfiguration.

This article hat eine schöne Erklärung von 1: 1 und 1: 0..1 Beziehungen in EF. Die Einschränkung hier ist ein Nebenprodukt der Tatsache, dass EF doesn't yet support unique constraints.

+0

So konnte ich nur die AccountConfig-Tabelle von Account verweisen, wenn die Account-Tabelle eine Spalte namens AccountConfigId hat? – jermny

+0

Nicht genau. Ihre Entität "AccountConfig" sollte nur eine "Id" -Spalte haben; Entfernen Sie die Spalte "AccountId" und stellen Sie sicher, dass "Id" nicht automatisch generiert wird. Beim Hinzufügen von 'AccountConfig' -Entitäten sollten ihre' Id's explizit so gesetzt werden, dass sie mit der 'Id' des' Account'-Tabellendatensatzes übereinstimmen. – Olly

+0

Sehen Sie den Artikel, den ich verlinkt habe, für ein Beispiel, das Ihrem ähnlich ist. – Olly

Verwandte Themen