0

私は2つのエンティティ、ユーザーとユーザーのレビューを作成しようとしています。ユーザーのレビューには、ユーザーのID、レビューを受けたユーザー、このコンポジット・プライマリ・キーもユーザのテーブル内のプライマリ・キーへの外部キーですが、EFはその中にポイントが表示されない追加のカラムを作成しています。それは常に空です。複合プライマリキーと外部キーコードファースト

これは、レビューのあるユーザーを取得しようとすると、User_SubjectId列にユーザーのIDが含まれていない限り、レビューコレクションは常に空であることが原因です。

私のクエリは、この

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

のようなものですレビューのコレクションは常に空です

ユーザーレビューエンティティ

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; } 
    } 
} 

Userエンティティは、この

01のようなものです私はこの写真に示すように、別の列が私のUserReviewsテーブルに作成された移行を追加するとき

はしかし、列はあるUser_SubjectId

enter image description here

これはバグである場合、私は知りませんEFか私はマッピングが間違っていました、どんな場合でもアイディアですか?

ありがとうございました

+0

未知の列は、User.Reviewsプロパティによって作成されます。あなたはその外部キーをマップしていないので、EFはその名前を自動的に生成します。 – Kinetic

+0

マップされていないということは何ですか?私のUserReviewエンティティをチェックしてください.2つの外部キーがあります –

+0

レビューは外部キーのどちらにリンクされていますか? – Kinetic

答えて

1

あなたはReversePropertyアノテーションを使用する必要があります。私opinonで

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; }  
} 

、それは流暢なマッピングを使用するときに設定するのが容易であるもののようなものです。

+0

はい、私は流暢なマッピングを使用して終了しましたが、あなたの答えは正しい方向に私を指摘しました。 –

関連する問題