2016-04-12 14 views
5

ho creato un database in base al quale il profilo utente è formato dai seguenti due classi:Errore con chiave primaria in uno-a-uno con Entity Framework

public class Usr 
{ 
    [Key()] 
    public int UsrID { get; set; } 

    public virtual UsrType UsrType { get; set; } 

    public virtual UsrStatus UsrStatus { get; set; } 

    [Required] 
    [MaxLength(100, ErrorMessage = "Email can only contain {0} characters")] 
    public string UsrEmail { get; set; } 

    [Required] 
    [MaxLength(32, ErrorMessage = "Password can only contain {0} characters")] 
    [MinLength(8, ErrorMessage = "Password must be at least {0} characters")] 
    public string UsrPassword { get; set; } 
} 

public class UsrDetails 
{ 
    [ForeignKey("UsrID")] 
    [Required] 
    public virtual Usr Usr { get; set; } 

    [Required] 
    [MaxLength(40, ErrorMessage = "Name can only contain {0} characters")] 
    public string UsrName { get; set; } 

    [Required] 
    [MaxLength(40, ErrorMessage = "Surname can only contain {0} characters")] 
    public string UsrSurname { get; set; } 

    [Required] 
    [MaxLength(20, ErrorMessage = "Country can only contain {0} characters")] 
    public string UsrCountry { get; set; } 

    [Required] 
    [MaxLength(20, ErrorMessage = "City can only contain {0} characters")] 
    public string UsrCity { get; set; } 

    [Required] 
    [MaxLength(40, ErrorMessage = "Street can only contain {0} characters")] 
    public string UsrStreet { get; set; } 

    [Required] 
    public int UsrNum { get; set; } 

    [Required] 
    public int UsrPostalCode { get; set; } 
} 

voglio collegare loro da avendo sia come chiave primaria il UsrID e ottengo un errore che UsrDetails non hanno una chiave primaria perché sto usando l'attributo chiave esterna. Qualche idea?

+0

Date un'occhiata a [Associazioni in codice EF prima: parte 3 - Associazioni chiave primaria condivisa] (http://weblogs.asp.net/manavi/associations-in-ef-4-1-code-first-part -3-shared-primary-key-associations) –

risposta

4

è necessario dichiarare una proprietà chiave nella UserDetails con lo stesso nome che si dichiara nell'attributo ForeignKey:

public class UsrDetails 
{ 
    [Key] 
    public int UsrID{ get; set; } 

    [ForeignKey("UsrID")] 
    public virtual Usr Usr { get; set; } 
} 

Tutti i tuoi entità devono avere una proprietà PK. In questo caso in cui si rappresenta una relazione uno a uno, il PK dell'entità dipendente è anche l'FK. Puoi controllare questo tutorial nel caso tu abbia bisogno di maggiori informazioni.

+0

ha funzionato! Grazie :) –

+0

sei il benvenuto, felice di averti aiutato;) – octavioccl

+0

@i_ll_be_back, ora ho notato che questa era la tua prima domanda in SO, congratulazioni !!. Se ritieni che la mia risposta sia stata utile, considera di accettare la mia risposta facendo clic sul segno di spunta verde. Questo aiuta a mantenere l'attenzione su SO vecchio che ancora non ha risposte. Non vi è alcun obbligo di farlo. – octavioccl