2016-04-12 24 views
5

I utworzeniu bazy danych, zgodnie z którym profil użytkownika jest tworzony przez dwóch następujących klasach:Błąd klucza podstawowego w jeden-na-jeden związek za pomocą 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; } 
} 

Chcę połączyć je mając jako klucz podstawowy UsrID i pojawia się błąd, że UsrDetails nie ma klucza podstawowego, ponieważ używam klucza obcego. Jakieś pomysły?

+0

Zobacz [Związki w Kodeksie EF Pierwszy: Część 3 - Współdzielone kluczowe skojarzenia kluczy] (http://weblogs.asp.net/manavi/associations-in-ef-4-1-code-first-part -3-współudział-podstawowy-klucz-stowarzyszenia) –

Odpowiedz

4

Musisz zadeklarować właściwości klucza w UserDetails o tej samej nazwie, które deklarują w atrybucie ForeignKey:

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

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

Wszystkie twoje podmioty muszą mieć właściwości PK. W tym przypadku, gdy reprezentujesz relację jeden do jednego, PK jednostki zależnej również jest FK. Możesz sprawdzić to tutorial, jeśli potrzebujesz więcej informacji.

+0

to działało! Dzięki :) –

+0

serdecznie, cieszę się, że pomogłem ci;) – octavioccl

+0

@i_ll_be_back, teraz zauważyłem, że to było twoje pierwsze pytanie w SO, gratulacje !!. Jeśli uważasz, że moja odpowiedź była pomocna, rozważ zaakceptowanie mojej odpowiedzi, klikając zielony znacznik wyboru. Pomaga to skupić się na starszych wersjach językowych, które wciąż nie mają odpowiedzi. Nie ma takiego obowiązku. – octavioccl