两个主键类

时间:2016-04-26 10:22:25

标签: asp.net asp.net-mvc-4

我开始做一个新项目并且我试图使我之前创建的数据库适应Entity Framework上的数据库,我有2个表:Challenge和Coment以及我想要做的是将coment与挑战联系起来。 我在使用Entity Framework之前做了什么:

 public class Challenge
{
    public int ChallengeId { get; set; } // id associado ao desafio
    public string TypeWork { get; set; } // tipo de trabalho que o cliente pretende que seja feito
    public string Description { get; set; } // Descricao detalhada do desafio
    public decimal Value { get; set; } // Valor em pontos ou em dinheiro pago ao vencedor do desafio
    public DateTime DateCriation { get; set; } // data da criação do anuncio
    public DateTime DataEnd { get; set; } // data em que expira o desafio
    public int? WinnerSolution { get; set; } // id da solucao vencedora
    public int PaymentTypeId { get; set; } // chave estrangeira para tipo de pagamento
    public int ComentChallengeId { get; set; } // chave estrangeira para Comentario do desafio
    public virtual ICollection<TypePayment> TypePayment { get; set; } // coleccao de tipos de pagamento 

    public virtual ICollection<ComentChallenge> ComentChallenge { get; set; } // lista de comentarios associados ao desafio

}

ComentChallenge类

namespace CrowdTouring.Models
{
    public class ComentChallenge
    {
        [Key]
        [Column(Order = 1)]
        public int ComentChallengeId { get; set; } // id do comentario do desafio
        [Key]
        [Column(Order = 2)]
        public int ChallengeId { get; set; } // id do desafio
        public string Title { get; set; } // titulo do comentario
        public string Description { get; set; } // Descricao do comentario
        public DateTime date { get; set; } // data do comentario

    }
}

在comentChallenge课程中,我创建了两个主要关键字1来与挑战相关联,另一个主要用于关于挑战的关联,我使用正确的方法我怎么能这样做?

1 个答案:

答案 0 :(得分:4)

我建议在DbContext中使用MobelBuilder来处理它。让它知道这两者是相关的。我在下面修改了你的代码并添加了一个上下文的例子。

通过使用约定,将在数据库中自动为您生成foreignkey id,您可以使用代码中的导航属性来访问关系。

 public class ApplicationDbContext : DbContext
    {
        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);

            builder.Entity<Challenge>().HasMany(x => x.CommentChallenges).WithOne(y => y.Challenge);
        }
    }

public class Challenge
{
    public int Id { get; set; } // id associado ao desafio
    public string TypeWork { get; set; } // tipo de trabalho que o cliente pretende que seja feito
    public string Description { get; set; } // Descricao detalhada do desafio
    public decimal Value { get; set; } // Valor em pontos ou em dinheiro pago ao vencedor do desafio
    public DateTime DateCriation { get; set; } // data da criação do anuncio
    public DateTime DataEnd { get; set; } // data em que expira o desafio
    public int? WinnerSolution { get; set; } // id da solucao vencedora
    public int PaymentTypeId { get; set; } // chave estrangeira para tipo de pagamento
    public virtual ICollection<TypePayment> TypePayment { get; set; } // coleccao de tipos de pagamento 

    public virtual ICollection<ComentChallenge> CommentChallenges { get; set; } // lista de comentarios associados ao desafio

}

namespace CrowdTouring.Models
{
    public class ComentChallenge
    {
        public int Id { get; set; } // id do comentario do desafio
        public string Title { get; set; } // titulo do comentario
        public string Description { get; set; } // Descricao do comentario
        public DateTime date { get; set; } // data do comentario
        public virtual Challenge Challenge { get; set;}
    }
}