私はコードファーストのデータベースを持っています。私の問題を引き起こしているテーブルは
public class Deadline
{
public Deadline() { }
public Deadline(Year year)
{
this.Year = year;
}
public Guid Id { get; set; }
[Required]
public Year Year { get; set; }
[Required]
[DataType(DataType.Date)]
[DataAnnotationsExtensions.Date]
public DateTime From { get; set; }
[Required]
[DataType(DataType.Date)]
[DataAnnotationsExtensions.Date]
public DateTime To { get; set; }
}
public class Year
{
public Year(Int32 value) { this.Value = value; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
[Required]
[Display(Name="Year")]
[DataAnnotationsExtensions.Year]
public Int32 Value { get; set; }
public virtual Deadline Deadline { get; set; }
}
create get メソッドを持つ年のコントローラーがあります
public ActionResult Create()
{
ViewBag.Id = new SelectList(db.Deadline, "Id", "Id");
var Year = new Year(db.Year.OrderByDescending(x => x.Value).FirstOrDefault().Value + 1);
Year.Deadline = new Deadline(Year);
return View(Year);
}
そしてpostメソッド
[HttpPost]
public ActionResult Create(Year year)
{
if (ModelState.IsValid)
{
if (db.Year.Select(x => x.Value).Contains(year.Value))
{
ModelState.AddModelError("AlreadyExists", "That year has already been added to the database, please edit instead");
return View(year);
}
db.Year.Add(year);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(year);
}
ただし、新しい年を作成しようとすると(年の値と締め切り日を設定して)、投稿に戻り、モデル状態が無効であり、
年フィールドは必須です。
私がチェックしたところ、投稿メソッドで year.Deadline.Year は実際に null です。知りたいのは、理由 (およびこれを修正する方法) が私を夢中にさせていることです。
@{ Model.Deadline.Year = Model; }
ビューでは何もしませんでした。
編集以下の作品
using (ProjectSelectionAndAllocation.Models.DatabaseContext Context = new Models.DatabaseContext())
{
var h = new Models.Year(1001);
h.Deadline = new Models.Deadline(h);
Context.Year.Add(h);
Context.SaveChanges();
}