0

Ich versuche, 2 Entitäten, Benutzer- und Benutzerrezensionen zu erstellen, wo Benutzerrezensionen einen zusammengesetzten Primärschlüssel haben, der die IDs der Benutzer ist, derjenige, der überprüft wurde und wer es getan hat Dieser zusammengesetzte Primärschlüssel ist auch ein Fremdschlüssel für den Primärschlüssel in der Benutzertabelle. EF erstellt jedoch eine zusätzliche Spalte, in der ich den Punkt nicht sehe, auch wenn ich ein Benutzerüberprüfungsobjekt in diese Spalte speichere wird nicht ausgefüllt, es ist immer leer.Composite-Primärschlüssel und Fremdschlüssel Code First

Dies führt dazu, dass beim Versuch, einen Benutzer mit seinen Bewertungen abzurufen, die Rezensionssammlung immer leer ist, es sei denn, die Spalte User_SubjectId enthält die ID des Benutzers.

Meine Frage ist, wie diese

return _context.Users 
       .Include(u => u.Reviews) 
       .Where(u => u.SubjectId.Equals(subjectId)); 

Die Bewertungen Sammlung ist immer leer

Einheit User Review

using System; 
using System.ComponentModel.DataAnnotations; 
using System.ComponentModel.DataAnnotations.Schema; 

namespace API.Data.Entities 
{ 
    public class UserReview 
    { 
     [Key, Column(Order = 0), ForeignKey("Reviewer")] 
     public string ReviewerId { get; set; } //The user that wrote the review 

     [Key, Column(Order = 1), ForeignKey("ReviewedUser")] 
     public string ReviewedUserId { get; set; } //The user who was reviewed 

     [Required] 
     [Range(1, 5)] 
     public int Rating { get; set; } 

     [Required] 
     public DateTimeOffset DateCreated { get; set; } 

     [Required] 
     public virtual User Reviewer { get; set; } 

     [Required] 
     public virtual User ReviewedUser { get; set; } 
    } 
} 

Das ist User-Einheit wie folgt

public class User 
    { 
     [Key] 
     [Required] 
     public string SubjectId { get; set; } 

     public User() 
     {     
      Reviews = new List<UserReview>(); 
     } 

     public virtual ICollection<UserReview> Reviews { get; set; }  
    } 

Allerdings, wenn ich die Migration fügen Sie eine weitere Spalten in meiner Tabelle Kundenberichte erstellt wird, wie auf diesem Bild gezeigt, die Spalte User_SubjectId

enter image description here

Ich weiß nicht, ob dies ein Fehler ist in EF oder ich haben meine Karten falsch gemacht, auf jeden Fall irgendwelche Ideen?

Danke

+0

Ihre unbekannte Spalte wird von der User.Reviews -Eigenschaft erstellt. Sie haben seinen Fremdschlüssel nicht zugeordnet, sodass EF den Namen automatisch generiert. – Kinetic

+0

Was meinst du ist nicht zugeordnet ?, überprüfen Sie meine UserReview-Entität, die 2 Fremdschlüssel sind dort –

+0

Bewertungen ist mit welchem ​​der Fremdschlüssel verknüpft? – Kinetic

Antwort

1

Sie müssen die Annotation ReverseProperty verwenden.

public class UserReview 
{ 
    [Key, Column(Order = 0), ForeignKey("Reviewer")] 
    public string ReviewerId { get; set; } //The user that wrote the review 

    [Key, Column(Order = 1), ForeignKey("ReviewedUser")] 
    public string ReviewedUserId { get; set; } //The user who was reviewed 

    [Required] 
    [Range(1, 5)] 
    public int Rating { get; set; } 

    [Required] 
    public DateTimeOffset DateCreated { get; set; } 

    [Required] 
    public virtual User Reviewer { get; set; } 

    [Required)] 
    public virtual User ReviewedUser { get; set; } 
} 

public class User 
{ 
    [Key] 
    [Required] 
    public string SubjectId { get; set; } 

    public User() 
    {     
     Reviews = new List<UserReview>(); 
    } 

    [InverseProperty("ReviewedUser")] // or Reviewer. 
    public virtual ICollection<UserReview> Reviews { get; set; }  
} 

Meiner Meinung nach, das ist die Art von Sache, die einfacher zu konfigurieren ist, wenn fließendes Mapping verwendet wird.

+0

Ja, am Ende habe ich eine flüssige Zuordnung verwendet, aber deine Antwort hat mich in die richtige Richtung gelenkt. –