2016-10-06 2 views
0

J'ai une planche de table (mais je la vois comme une publication). Pour chaque poste/conseil je veux ajouter la possibilité de voter et avoir créé une table Votes. Chaque article peut avoir un numéro de vote (par exemple 5) et chaque vote appartient à un message/forum. Je le vois comme cela doit être une relation un à un. Correctement?Enregistrer la clé étrangère dans la base de données?

Ceci est mon modèle

public class Board 
{ 
    [Key] 
    public int MessageId { get; set; } 
    public String Message { get; set; } 

    [Required] 
    public Vote Vote { get; set; } 
} 

public class Vote 
{ 
    [Key] 
    public int? VoteId { get; set; } 
    public int? Votes { get; set; } 

    public Board Board { get; set; } 

} 

Lorsque I'am essayer de créer un nouveau poste ModelState.IsValid est fausse et aucune erreur, et ne voit pas pourquoi quand je debug.

Ce i mon contrôleur

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create([Bind(Include = "messageId,message,VoteId,Votes")] Board board) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Boards.Add(board); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return RedirectToAction("Index"); 
    } 

Je pense que ce devrait être bien parce que je l'accepte null pour les votes dans mon modèle.

J'ai manuellement ajouté des données dans les deux tableaux et j'obtiens un résultat sur la page Web avec le code, mais je ne peux pas créer de nouveaux messages.

messages d'affichage/planche

// GET: Boards 
    public ActionResult Index() 
    { 
     var data = db.Boards.Include("Vote").ToList(); 

     return View(data); 
    } 

et la vue.

@model IEnumerable<Klotterplank.Models.Board> 

      @foreach (var item in Model) 
      { 
       <ul> 
        <li class="board-blocks">@Html.DisplayFor(modelItem => item.Message)</li> 
        <li class="board-blocks">@Html.DisplayFor(modelItem => item.Vote.Votes)</li> 
       </ul> 
      } 
+0

peut chaque poste vraiment seulement avoir un vote? Ou voulez-vous dire que chaque utilisateur ne peut voter qu'une seule fois sur chaque message? – ADyson

+0

Le résultat devrait être comme ceci votant ici sur stackoverflow. Un poste, deux flèches et un numéro. Un poste a un vote et chaque utilisateur ne peut voter qu'une seule fois sur chaque message. Je suppose que j'ai besoin d'ajouter l'identifiant utilisateur. – Xtreme

+0

donc il y a plusieurs votes par article, un par utilisateur. Alors dans l'UI est quelque chose qui montre le nombre total de votes par poste. Personnellement, je ne stockerais pas ce total dans la base de données - en termes relationnels, il est redondant car vous pouvez le calculer en fonction des données de vote individuelles (dont vous avez besoin, pour lier les votes aux utilisateurs et les empêcher de voter deux fois). s'ils changent/suppriment leur vote). – ADyson

Répondre

0

Si chaque article a max. un vote et un vote appartient seulement à un poste et le vote est seulement un int, je suggérerais d'ajouter le "vote" comme nullable int à "Post" de sorte que vous n'avez même pas besoin d'un tableau de vote