EF Как обновить значение связанной таблицы

#c# #asp.net #asp.net-mvc

#c# #asp.net #asp.net-mvc

Вопрос:

Сценарий

У меня есть 2 таблицы, person и их activities, каждый раз, когда я создаю activity, я также должен выбрать пользователя, которому принадлежит это activity. теперь, как мне сохранить / всегда обновлять * LatestActivityId запись PersonID пользователя?

это потому, что я хотел бы отследить, какими были данные о последней активности пользователя.

большое спасибо за ваш вклад

Вот что у меня есть на данный момент:

     [HttpPost]

   public ActionResult Create([Bind(Include = "PersonId"   ","   "ActivityTypeId")] dbo_Activities dbo_Activities)

   {
    if (ModelState.IsValid) {

     // >>STUCK HERE<< //int SaveAsLatestActivity = db.dbo_Businesses.Max(p => p.ActivityId);

     db.dbo_Activities.Add(dbo_Activities);

     db.SaveChanges();

     return RedirectToAction("Index");
    }

    // ComboBox >> selects person

    ViewData["PersonId"] = new SelectList(db.dbo_Businesses, "PersonId", "FullName", dbo_Activities.PersonId);

    return View(dbo_Activities);
   }
  

Моя модель активности

  public class dbo_Activities
    {
        [Key]
        [Column(Order = 0)]
        [Required]
        [Display(Name = "Activity Id")]
        public Int32 ActivityId { get; set; }

        [Display(Name = "Person Id")]
        public Int32? PersonId { get; set; }
}
  

Комментарии:

1. не могли бы вы показать свою модель действий, пожалуйста.

2. у вас есть PersonId поэтому после того, как вы создадите действие и оно получит идентификатор, запросите пользователя из таблицы persons, задайте LatestActivityId идентификатор только что созданного вами действия и сохраните пользователя

3. @AntonToshik Спасибо, что вы здесь, я добавил свою модель активности в вопрос

4. @GregH Спасибо, что вы здесь .. не могли бы вы, пожалуйста, объяснить, что вы имеете в виду?

5. @Yosh взгляните на мой ответ и посмотрите, это то, к чему вы стремитесь. Дайте мне знать, если что-то не имеет для вас смысла

Ответ №1:

У вас есть PersonId поэтому после того, как вы создадите действие и оно получит идентификатор, запросите пользователя из таблицы persons, задайте LatestActivityId идентификатор действия, которое вы только что создали, и сохраните пользователя. Вы не опубликовали свои полные модели, поэтому я делаю некоторые предположения о том, как называются определенные свойства и названия моделей, но это должно выглядеть примерно так:

 [HttpPost]
public ActionResult Create([Bind(Include = "PersonId"   ","   "ActivityTypeId")] dbo_Activities dbo_Activities)
{
    if (ModelState.IsValid) {
        db.dbo_Activities.Add(dbo_Activities);
        db.SaveChanges();

        //set LatestActivityId on the person to the ActivityId of the entry that was just created
        var person = db.dbo_Persons.Single(x => x.Id == dbo_Activities.PersonId);
        person.LatestActivityId = dbo_Activities.ActivityId;
        db.SaveChanges();

        return RedirectToAction("Index");
    }

    ViewData["PersonId"] = new SelectList(db.dbo_Businesses, "PersonId", "FullName", dbo_Activities.PersonId);

    return View(dbo_Activities);
}
  

Комментарии:

1. Потрясающе, это сработало! Я надеюсь, что это поможет кому-то еще в будущем!