現在、EF4.3およびコード・ファーストを使用しています。私のオブジェクトの作成は、(私の見解では、自動生成されたCreateを使用して)動作しますが、オブジェクトを編集しようとすると、究極的にナビゲーションプロパティに結びつく変更は保存されません。私はreading on relationshipsでしたが、関係が変更されたことを私のコンテキストに伝える方法を理解していません。エンティティ・フレームワーク内のナビゲーション・プロパティを更新するための関係を取得できません
私の実装のコード例です。ここ
@* Snippet from my view where I link into my ViewModel. *@
<div class="row">
<div class="editor-label">
@Html.LabelFor(model => model.ManagerID)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.ManagerID, ViewBag.Manager as SelectList, String.Empty)
@Html.ValidationMessageFor(model => model.ManagerID)
</div>
</div>
は私のコントローラの実装(私の編集のPOST)である:私のプロジェクトオブジェクト内
[HttpPost]
public ActionResult Edit(ProjectViewModel projectViewModel)
{
if (ModelState.IsValid)
{
Project project = new Project();
project.ProjectID = projectViewModel.ProjectID;
project.Name = projectViewModel.Name;
project.ProjectManager = repository.GetUser(projectViewModel.ManagerID);
repository.InsertOrUpdateProject(project);
repository.Save();
return RedirectToAction("Index");
}
ViewBag.Manager = new SelectList(repository.GetUsers(), "UserID", "FullName", projectViewModel.ManagerID);
return View(projectViewModel);
}
:ここ
public class Project
{
public int ProjectID { get; set; }
[Required]
public string Name { get; set; }
// Navigation Properties
public virtual User Manager { get; set; }
}
リポジトリから対応する方法である(ここで、私のコンテキスト常駐):
public void InsertOrUpdateProject(Project project)
{
if (program.ProjectID == default(int))
{
context.Projects.Add(project);
}
else
{
context.Entry(project).State = EntityState.Modified;
}
}
これは私のプロパティを更新するためには機能しますが、ナビゲーションプロパティ(この場合はManager)は更新されません。助けをお待ちしています。
優秀への更新をチェックアウトしてください。ありがとうございました。もともと私は外来キールートを行っていましたが、いくつか問題がありました。それはうまくいきましたが、適切にマッピングするためのすべてのナビゲーションプロパティで[ForeignKey( "Name")]属性を定義しなければなりませんでした。あなたの答えを受け入れる。ありがとう! – glockman
@ user1240560:私の答えの名前では、実際にForeignKey属性(名前の規則でFK検出)なしで動作するはずです。しかし、あなたの名前がはっきりと違っていて、大会のルールに従わなければ、あなたは注釈が必要です。 – Slauma
@Slauma私はあなたを愛していますが、他のアプローチはコードファーストモデルではうまくいくはずですが、データベースで最初に私のために働く唯一のものはあなたのハックでした、私は数日間それを乱していました、そして今私はあなたはあまりにも –