これが簡単なものだといいのですが。
EntityFramework4.1でのMVC4の使用。
カスタムビューモデルのプロパティを使用して、ビューから渡されたいくつかのプロパティを使用してモデルを更新しようとしています。
私はこのクラスを持っています。
public class SitePage
{
public System.Guid PageID { get; set; }
public int PageTypeID { get; set; }
public string PageTitle { get; set; }
public Nullable<int> RegionId { get; set; }
public Nullable<int> LockLevelId { get; set; }
public System.DateTime UpdatedDate { get; set; }
public System.Guid UpdatedById { get; set; }
public System.Guid CreatedById { get; set; }
public System.DateTime CreatedDate { get; set; }
public string Url { get; set; }
public int PageStateId { get; set; }
public string SummaryImage { get; set; }
}
私のコントローラー
public ActionResult Update(AddPageViewModel model)
{
if (ModelState.IsValid)
{
var g = new Guid(model.PageId);
SitePage UpdatePage = dbSite.SitePages.FirstOrDefault(m => m.PageID == g);
//This is a page update. Not updating all properties
UpdatePage.PageTitle = model.PageTitle;
UpdatePage.GetFirstSection.PageSectionText.PageText = model.PageText;
UpdatePage.PageTypeID = (int)SitePageType.PageTypes.CommunityPage;
UpdatePage.RegionId = model.Region
UpdatePage.CreatedById = userId;
UpdatePage.CreatedDate = DateTime.UtcNow;
UpdatePage.UpdatedById = userId;
UpdatePage.UpdatedDate = DateTime.UtcNow;
TryUpdateModel(UpdatePage);
dbSite.Save();
return RedirectToAction("Community_test", "Community", new { id = UpdatePage.Url });
}
else
{
return RedirectToAction("Community_test", "Community");
}
}
このページビューモデルをコントローラーに渡す
public class AddPageViewModel
{
public string PageTitle { get; set; }
public string PageText { get; set; }
public int Region { get; set; }
public string TagString { get; set; }
public string ParentPageId { get; set; }
public string PageId { get; set; }
}
デバッグすると、TryUpdateModelが呼び出されたときにSitePageインスタンスUpdatePageにすべての正しい値があることがわかります。ただし、RegionIdを除くすべての値はデータベースで正しく更新されます。RegionIdはnullとして設定されます。サーバーでトレースを実行すると、SQLエンティティフレームワークが生成するのは、モデルに値がある場合でも、RegionIdをnullに設定していることです。この問題は断続的です!動作する場合もあれば、動作しない場合もあります。4人に1人は正しく更新され、どこがうまくいかないのかよくわかりません。私は本当にこのようなものに慣れていません。
クラスはデータベースから生成され、edmxファイルを使用しています。次回データベースからモデルを更新するときに、これらのクラスをオーバーライドせずに、これらのクラスに変更を加えることができるかどうかはわかりません。
必要なアイデアや詳細情報があれば、私に一言お願いします。乾杯