コメントできるニュースサイトを作ろうとしています。私はpluralsight.comのガイドをフォローしてきましたが、レターのガイドで行われていることに従いましたが、実行時にモデルの内部をデバッグして見ると、コメントは含まれていません。
私のDBクラス:
public class ProjectDB {
public DbSet<ContentNode> ContentNodes{ get; set; }
public DbSet<Comment> Comments { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ContentNode>()
.Property(n => n.ID).HasColumnName("NodeID");
modelBuilder.Entity<ContentNode>()
.HasMany(node => node.Comments)
.WithRequired(comment => comment.Node);
}
}
関係するモデル:
public class ContentNode : Node
{
public ContentType ContentType { get; set; }
public ContentCategory Category { get; set; }
public ICollection<Comment> Comments { get; set; }
public ContentNode()
{
Comments = new List<Comment>();
}
}
public class Comment
{
public int ID { get; set; }
public ContentNode Node { get; set; }
public string Body { get; set; }
}
データベースからニュース記事を取得してビューに送信するコントローラー メソッド
[GET("frettir/{year}/{month}/{day}/{title}")]
public ActionResult GetArticle( int year, int month, int day, string title)
{
var model = (from f in _db.ContentNodes
where f.dateCreated.Year == year &&
f.dateCreated.Month == month &&
f.dateCreated.Day == day &&
f.Title == title &&
f.ContentType.ID == 1
select f).Single();
return View(model);
}
そして最後に、ビュー自体:
@model Project.Models.ContentNode
@{
ViewBag.Title = "GetByID";
}
<h2>GetByID</h2>
<fieldset>
<legend>News</legend>
<div class="display-label">
@Html.DisplayNameFor(model => model.Title)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.Title)
</div>
<div class="display-label">
@Html.DisplayNameFor(model => model.Body)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.Body)
</div>
<div class="display-label">
@Html.DisplayNameFor(model => model.dateCreated)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.dateCreated)
</div>
</fieldset>
<p>
@Html.ActionLink("Edit", "Edit", new { id=Model.ID }) |
@Html.ActionLink("Back to List", "Index")
</p>
@foreach (var item in Model.Comments)
{
@Html.Partial("_Comment",item)
}
@Html.ActionLink("New comment", "Create", "Comment", new { NodeID = Model.ID }, null)
私は例を見て、ビデオガイドを何十回も見て、何が間違っていたかを確認しました。私が思いついた唯一の解決策は、 NodeContent テーブルを Comments テーブルに結合し、それを別のモデルに投影することですが、収集できるものからは必要ありません。
どんな助けでも大歓迎です。