2016-04-26 7 views
2

Ich fing an, ein neues Projekt zu machen und ich versuche, meine Datenbank, die ich zuvor erstellt habe, an die Datenbank auf Entity Framework anzupassen, ich habe 2 Tabellen: Challenge und Coment und was ich tun möchte, ist ein coment zuzuordnen eine Herausforderung. Was ich getan habe, bevor Entity Framework:Zwei Primärschlüssel Klasse

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 Klasse

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 

    } 
} 

In der comentChallenge Klasse i erstellt 2 Primärschlüssel 1 auf die Herausforderung zu assoziieren und die andere zu den coments zu assoziieren über die Herausforderung bin ich mit dem richtigen Ansatz Wie kann ich das auf diese Weise tun?

Antwort

4

Ich würde vorschlagen, den MobelBuilder im DbContext zu verwenden, um es zu kümmern. Lass es wissen, dass die beiden miteinander verwandt sind. Ich habe Ihren Code unten geändert und ein Beispiel für einen Kontext hinzugefügt.

Durch die Verwendung der Konventionen werden die Fremdschlüssel-IDs automatisch für Sie in der Datenbank generiert und Sie können die Navigationseigenschaften im Code verwenden, um auf die Beziehungen zuzugreifen.

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 Fragen: wo Sie diesen ModelBuilder? und wie funktioniert es in Bezug auf die Datenbank? –

+0

Es ist in der Anwendung DB-Kontext. Vielleicht hilft Ihnen dieser Link https://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-crea- eine asp-net-mvc-anwendung. In Bezug auf die Datenbank wird es eine Spalte für Sie für den Fremdschlüssel erstellen, und es wird, im Falle einer Viele-zu-Viele-Beziehung, eine zusätzliche Tabelle erzeugen, um die Übereinstimmung zu handhaben. Diese Spalte wird für Sie in Code unsichtbar sein, da es von EF verwaltet wird –

+1

Hmmm ich irgendwie jetzt, dass Konzepte, aber in diesem Fall habe ich eine 1 zu viele Beziehung, ich brauche nur, dass meine Klasse ComentChallenge viele Kommentare zu 1 Herausforderung zuordnen –

Verwandte Themen