2016-04-26 5 views
2

Я начал делать новый проект, и я пытался адаптировать мою базу данных, которую я создал ранее, в базу данных на Entity Framework, у меня есть две таблицы: Challenge и 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 я создал 2 первичные ключи 1, чтобы связать с этой задачей, а другой, чтобы связать с коментарии о вызове я использую правильный подход, как я могу сделать это таким образом?

ответ

4

Я бы предложил использовать MobelBuilder в DbContext, чтобы позаботиться об этом. Сообщите ему, что они связаны друг с другом. Я изменил ваш код ниже и добавил пример контекста.

Используя соглашения, идентификаторы foreignkey будут автоматически сгенерированы для вас в базе данных, и вы можете использовать свойства навигации в коде для доступа к отношениям.

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

2 вопроса: где вы положили этот modelBuilder? и как это работает с точки зрения базы данных? –

+0

Это в контексте БД приложения. Возможно, эта ссылка поможет вам https://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-anity-framework-data-model-for- ан-Asp-сетчатые MVC-приложения. В терминах базы данных он создаст для вас столбец для внешнего ключа, и в случае отношения многих к большому числу создаст дополнительную таблицу для обработки соответствия. Этот столбец будет невидим для вас в коде, так как он управляется EF –

+1

hmmm i kinda теперь, что понятия, но в этом случае у меня есть отношения от 1 до многих, мне просто нужно, чтобы мой класс ComentChallenge ассоциировал многие комменты с одним вызовом –

Смежные вопросы