2015-10-27 9 views
7

Ho due entità che desidero essere collegate alla relazione 1: 1. L'utente è principal e UserActivation dipende, ma non ho idea di come funzioni.Codice struttura entità Prima relazione One-to-One

public class User 
{ 
    [Key] 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public string Lastname { get; set; } 
    public string Username { get; set; } 

    public virtual UserActivation UserActivation { get; set; } 
} 

public class UserActivation 
{ 
    [Key] 
    public Guid Id { get; set; } 
    public Guid UserId { get; set; } 
    public bool Active { get; set; } 

    public virtual User User { get; set; } 
} 

ho cercato di rimuovere parola chiave 'virtuale', hanno cercato di aggiungere ForeignKey ("UserID") o ForeignKey ("Utente"), ho anche provato a fare [Key, ForeignKey ("Utente") e nessuno di loro mi ha aiutato. Voglio fare una relazione 1: 1 usando solo le annotazioni di dati. Qualsiasi aiuto è molto apprezzato. Anche le mie due classi hanno i loro PK.

+0

Qual è l'errore che si ottiene? –

+0

attualmente sto cercando di fare qualcosa di stupido e ho ottenuto "UserActivation_User_Source:: la molteplicità non è valida nel ruolo 'UserActivation_User_Source' nella relazione 'UserActivation_User'. Poiché le proprietà del ruolo dipendente non sono le proprietà chiave, il limite superiore della molteplicità del Il ruolo dipendente deve essere '*'. " – GrandaS

+0

Dopo aver apportato modifiche al modello, è stata aggiunta/aggiornata la migrazione. O hai l'automazione automatica abilitata? – mrsargent

risposta

10

chiavi esterne non sono supportate per 1: 1 prova:

public class User 
{ 
    [Key] 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public string Lastname { get; set; } 
    public string Username { get; set; } 

    public virtual UserActivation UserActivation { get; set; } 
} 

public class UserActivation 
{ 
    [Key] 
    [ForeignKey("User")] 
    public Guid Id { get; set; } 
    public bool Active { get; set; } 

    public virtual User User { get; set; } 
} 

Impossibile determinare il fine principale di un'associazione tra i tipi ‘Model.PersonPhoto’ e ‘Model.Person’. La fine principale di questa associazione deve essere configurata in modo esplicito utilizzando l'API della relazione fluente o le annotazioni di dati.

Questo problema si risolve più facilmente utilizzando un'annotazione ForeignKey sulla classe dipendente per identificare che contiene la chiave esterna. Quando si configurano le relazioni uno a uno, Entity Framework richiede che anche la chiave primaria del dipendente sia la chiave esterna. Nel nostro caso PersonPhoto è il dipendente e la sua chiave, PersonPhoto.PersonId, dovrebbe essere anche la chiave esterna. Vai avanti e aggiungi l'annotazione ForeignKey alla proprietà PersonPhoto.PersonId, come mostrato nell'Esempio 4-21. Ricordarsi di specificare la proprietà di navigazione per la relazione quando si aggiunge l'annotazione ForeignKey.

https://www.safaribooksonline.com/library/view/programming-entity-framework/9781449317867/ch04s07.html

+0

sì, questo ha funzionato, ha fatto 1: 1, ma ora credo che entrambi i Id devono essere uguali, non è possibile fare 1: 1, ma User userebbe Id e UserActivation userebbe la proprietà UserId per connettersi? – GrandaS

+0

Perché hai bisogno di un ID separato se è 1: 1? –

+0

Ecco una spiegazione più approfondita: http://weblogs.asp.net/manavi/associations-in-ef-4-1-code-first-part-3-shared-primary-key-associations –