实体框架与ASP.. NET MVC将值保存到错误的列

本文关键字:保存 错误 框架 ASP NET MVC 实体 | 更新日期: 2023-09-27 18:19:06

我有以下类,一个挑战有很多提交,它也有一个赢家。问题是,在我的数据库实体框架已经创建了提交表[ChallengeId] &[Challenge_ChallengeId]当我保存一个对象时,它被添加到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; }
}

实体框架与ASP.. NET MVC将值保存到错误的列

我认为您可以从使用约定和使用简写关键字作为数据类型中获益。我认为这个错误是因为您用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; }
}

我很确定实体框架使用基于约定的方法,解决这个问题的最简单方法是使用Id名称而不是ChallengeIdSubmissionId

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