これは、エンティティ フレームワーク 5 と asp.net mvc4 codefirst で使用している関連する列挙型を含む私のモデルです。ポータブル データベース ファイル (.mdf) も使用しています。
public class Project
{
public Project()
{
Images = new List<ProjectImage>();
}
public int ProjectId { get; set; }
[Required]
public string Title { get; set; }
public virtual ICollection<ProjectImage> Images { get; set; }
public string Description { get; set; }
public ProjectType Type { get; set; }
public ProjectState State { get; set; }
}
public enum ProjectType
{
Phone,
Web,
Windows
}
public enum ProjectState : byte
{
InProgress,
NotStarted,
Done
}
ビューからモデルをポストバックした後、列挙フィールドを除くすべてのフィールドがデータベースに適切に保存されます。それらは保存されますが、ビューで異なる値を選択した後でも、各列挙型の最初の値のみが保存されます。
編集を保存しようとしましたが、同じことが起こります。
create post メソッドの最初からステップ実行しましたが、コンテキストで savechanges を呼び出した後はすべて問題ないように見えますが、インデックス ページにリダイレクトすると、enum の初期値として enum プロパティ値が表示されます (つまり、最初の enum 値)
私の作成および編集方法は以下のとおりです。バグではないことを願っていますが、これで数日間髪を引っ張っているので助けてください. コードファーストと列挙型を一緒に始めたばかりです。ありがとう。
Create post メソッド
[HttpPost]
public ActionResult Create(Project project, HttpPostedFileBase file)
{
try
{
if (file != null && file.ContentLength > 0 && file.ContentType.Contains("image"))
{
//create a new unique filename with using guid, filename and project title
string relativePath = Constants.PortfolioImagesBaseFolder +
project.Title.Replace(" ", "") +
Guid.NewGuid().ToString() +
Path.GetFileName(file.FileName);
string absolutePath = Server.MapPath(relativePath);
//save the file
file.SaveAs(absolutePath);
if (ModelState.IsValid)
{
project.Images.Add(new ProjectImage()
{
IsProjectMainImage = true,
Url = relativePath,
Title = "Main Project Image"
});
context.Projects.Add(project);
context.SaveChanges();
return RedirectToAction("Index");
}
}
ViewBag.ProjectTypes = CreateSelectListFromEnumType<ProjectType>();
ViewBag.ProjectStates = CreateSelectListFromEnumType<ProjectState>();
return RedirectToAction("Index");
}
Edit Post メソッド
[HttpPost]
public ActionResult Edit(int id, Project project)
{
try
{
if (ModelState.IsValid)
{
//Project projectFromDb = context.Projects.Single(p => p.ProjectId == id);
//projectFromDb.State = project.State;
//projectFromDb.Type = project.Type;
//projectFromDb.Title = project.Title;
//projectFromDb.Description = project.Description;
EntityState entityState = context.Entry(project).State;
context.Entry(project).State = EntityState.Modified;
context.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.ProjectTypes = CreateSelectListFromEnumType<ProjectType>();
ViewBag.ProjectStates = CreateSelectListFromEnumType<ProjectState>();
return View(project);
}
また、重複としてマークする前に、stackoverflow で多くの回答を調べましたが、誰も助けてくれませんでした。質問をする前に 2 日間待ちました。