2016-10-06 7 views
0

У меня есть настольные доски (но см. Вместо этого как пост). Для каждой должности/доски я хочу добавить возможность проголосовать и создал таблицу голосов. Каждый пост может иметь избирательный номер (например, 5), и каждое голосование принадлежит почте. Я вижу это, так как это должно быть отношение «один к одному». Правильно?Сохранить внешний ключ в базе данных?

Это мои модели

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

} 

Когда I'am пытается создать новый пост ModelState.IsValid ложна и ошибок нет, и не может понять, почему, когда я отладки.

Это я мой контроллер

[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"); 
    } 

Я думаю, что это должно быть хорошо, потому что я принимаю null за голоса в моей модели.

Я вручную добавил некоторые данные в обе таблицы, и я получаю результат на веб-странице с кодом, но я не могу создать новые сообщения.

Показать сообщения/Доски

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

     return View(data); 
    } 

И вид.

@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

может каждый пост действительно есть только один голос? Или вы имеете в виду, что каждый пользователь может голосовать только за каждый пост? – ADyson

+0

Результат должен быть таким, как это голосование здесь, в stackoverflow. Один пост, две стрелки и номер. Одна должность имеет один голос, и каждый пользователь может голосовать только один раз на каждом посту. Думаю, мне нужно добавить UserID. – Xtreme

+0

, поэтому есть несколько голосов за сообщение, по одному на каждого пользователя. Тогда _ в UI_ - это то, что показывает общее количество голосов за сообщение. Лично я бы не сохранил эту сумму в базе данных - в реляционных терминах она избыточна, потому что вы можете рассчитать ее на основе отдельных данных голосования (которые вам нужны, чтобы связать голоса с пользователями и остановить их голосование дважды, или обновить если они меняют/снимают свой голос). – ADyson

ответ

0

Если каждый пост имеет макс. один голос и голосование принадлежат только одной должности, а голосование - только int, я предлагаю добавить «Голосование» как обнуляемый int, чтобы «отправить», поэтому вам даже не нужна таблица голосования