1

私は次のクラスを持っています。チャレンジには多くの提出物があり、勝者もいます。問題は、私のデータベースでは、Entity フレームワークが Submissions テーブル [ChallengeId] & [Challenge_ChallengeId] に 2 つの列を作成したことです。オブジェクトを保存すると、ChallengeId 列に追加されますが、Challenge_ChallengeId 列で関係が保持されます。

これを引き起こしているモデルに問題がありますか、または関係を保持して同じ列に保存するように設定できる方法はありますか?

ありがとう!

public class Submission
 {
    [Key]
    public Int32 SubmissionId { get; set; }

    public DateTime Created { get; set; }

    public Int32 ChallengeId { get; set; }
    [ForeignKey("ChallengeId")]
    public virtual Challenge Challenge { get; set; }
    public String YouTubeVideoCode { get; set; }

    public virtual IList<SubmissionVote> Votes { get; set; }
}

public class Challenge
{
    [Key]
    public Int32 ChallengeId { get; set; }
    [Required]
    public String ChallengeName { get; set; }
    public virtual IList<Submission> Submissions { get; set; }

    public Int32? OverallWinnerId { get; set; }
    [ForeignKey("OverallWinnerId")]
    public virtual Submission OverallWinner { get; set; }

}
4

2 に答える 2

1

規則を使用するだけでなく、省略形のキーワードをデータ型として使用することでメリットが得られると思います。エラーは、ForeignKey 属性でプロキシに注釈を付けたためだと思います。これを試して

public class Submission
{
    public int SubmissionId { get; set; }
    public DateTime Created { get; set; }
    public int ChallengeId { get; set; }
    public string YouTubeVideoCode { get; set; }

    public virtual Challenge Challenge { get; set; }
    public virtual IList<SubmissionVote> Votes { get; set; }
}

public class Challenge
{
    public int ChallengeId { get; set; }
    [Required]
    public string ChallengeName { get; set; }
    public int? OverallWinnerId { get; set; }

    public virtual Submission OverallWinner { get; set; }
    public virtual IList<Submission> Submissions { get; set; }
}
于 2013-06-20T10:59:02.747 に答える
0

Entity Framework が規則ベースのアプローチを使用していることは確かです。これを修正する最も簡単な方法は、and の代わりに名前を使用することですIdChallengeIdSubmissionId

public class Submission
 {
    [Key]
    public Int32 Id { get; set; }

    public DateTime Created { get; set; }

    public Int32 ChallengeId { get; set; }
    [ForeignKey("ChallengeId")]
    public virtual Challenge Challenge { get; set; }
    public String YouTubeVideoCode { get; set; }

    public virtual IList<SubmissionVote> Votes { get; set; }
}

public class Challenge
{
    [Key]
    public Int32 Id { get; set; }

    [Required]
    public String ChallengeName { get; set; }
    public virtual IList<Submission> Submissions { get; set; }

    public Int32? OverallWinnerId { get; set; }
    [ForeignKey("OverallWinnerId")]
    public virtual Submission OverallWinner { get; set; }
}
于 2013-06-20T10:58:32.583 に答える