データベース内のApplicant
とApplicantNotification
OneToOneリレーションシップテーブルを更新しようとしています。しかし、私が努力しているのは働いていない。EF Updateデータベース内の2つのエンティティが更新されていません
オブジェクトをEFで選択してプロパティを上書きするので、EFは変更を追跡しますが、データベースには反映されません。
質問: EFで2つのエンティティを更新するにはどうすればよいですか?
申請者:
[Index]
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ApplicantID { get; set; }
[Required]
public string ApplicantTitle { get; set; }
[Required]
public string Firstname { get; set; }
[Required]
public string Lastname { get; set; }
[Required]
public string Address { get; set; }
[Required]
public string Address1 { get; set; }
[Required]
public string Address2 { get; set; }
[Required]
public string Address3 { get; set; }
[Required]
public string Postcode { get; set; }
[Required]
public string CaseReference { get; set; }
[DataType(DataType.Date)]
public DateTime DateOfBirth { get; set; }
public ApplicantNotification Notification { get; set; }
ApplicantNotification:
[Index]
[Key, Column("ApplicantID"), ForeignKey("Applicant")]
public int ApplicantNotificationID { get; set; }
public bool FirstNotification { get; set; }
public bool SecondtNotification { get; set; }
public bool ThirdNotification { get; set; }
public bool FinalNotification { get; set; }
[DataType(DataType.Date)]
public DateTime? ReminderDate { get; set; }
public int ReminderFrequency { get; set; }
[DataType(DataType.Date)]
public DateTime? FirstNotificationDate { get; set; }
[DataType(DataType.Date)]
public DateTime? SecondNotificationDate { get; set; }
[DataType(DataType.Date)]
public DateTime? ThirdNotificationDate { get; set; }
public bool IsArchive { get; set; }
public virtual Applicant Applicant { get; set; }
方法:あなたがdbContextsか何かを横断しようとすることになり
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(ApplicantNotificationViewModel model)
{
if (ModelState.IsValid)
{
//select from ef
var applicant = (from a in db.Applicants
where a.ApplicantID == model.ApplicantID
select a).FirstOrDefault();
var applicantNotification = (from an in db.ApplicantNotifcations
where an.ApplicantNotificationID == model.ApplicantID
select an).FirstOrDefault();
SetApplicant(model, applicant);
SetApplicantNotification(model, applicantNotification);
using (var context = new WorkSmartContext())
{
try
{
db.Entry(applicant).State = EntityState.Modified;
db.Entry(applicantNotification).State = EntityState.Modified;
context.SaveChanges();
}
catch (Exception ex)
{
}
}
return RedirectToAction("Index");
}
return View(model);
}
おかげ
私はそれも試してみましたが、更新しませんテーブル – Haris
なぜこのシナリオでの取引ですか? EFはすでにそれを1つにまとめます。 [here](https://msdn.microsoft.com/en-us/library/dn456843(v=113).aspx) –
を参照してください。これは2つのエンティティを更新するためですか? 2番目のSaveChanges()で例外がスローされると仮定します。また、これら2つのテーブルの間にOneToOne関係があります。 – Haris