Общие свойства данных в объектах данных ASP.NET MVC 2 - PullRequest
1 голос
/ 04 октября 2010

Хорошо, я уже некоторое время борюсь с этим.

У меня есть стандартный проект MVC2 и я использую EF4 для доступа к объектам данных. Многие из моих объектов данных (и, следовательно, таблиц базы данных) имеют два общих поля: UpdateUserAccountID и UpdateDate.

В каждом из моих контроллеров я в настоящее время устанавливаю эти поля вручную в каждом контроллере в действии Edit:

    // POST: /Modes/Edit/2
    [HttpPost]
    public ActionResult Edit(int id, FormCollection formValues)
    {
        Mode mode = _repository.GetMode(id);

        //Set update flags
        mode.UpdateUserAccountID = _userRepository.GetUserID(User.Identity.Name);
        mode.UpdateDate = DateTime.Now;

        try
        {
             UpdateModel(mode);
             _repository.Save();
             return RedirectToAction("Details", new { id = mode.ModeID });
         }
         catch
         {
             return View(mode);
         }

    }

Проблема в том, что я хочу обновить эти два поля в центральном месте, независимо от типа контроллера. Я использую шаблон Repository / IRepository для своих объектов данных. Я также настроил BaseController, так как я думал, что мог бы передать свой объект 'mode' в примере выше общей функции в базовом контроллере для установки этих двух полей. Но я не мог понять это, и универсальная функция не знает об этих конкретных полях.

Должен ли я вместо этого создавать базовый класс для своих репозиториев? Я не могу представить, как это будет работать в рамках MVC. В веб-формах у меня просто был бы интерфейс, который все мои модели реализуют с общими полями, но я не могу приспособить его к подходу MVC.

Любая помощь в подходе была бы великолепна.

1 Ответ

1 голос
/ 04 октября 2010

Этот пост содержит подробное решение для этого сценария: Entity Framework - аудиторская деятельность

По сути, идея состоит в том, как обновитьобщие свойства, такие как LastModifiedBy или LastModifiedDate для всех объектов перед сохранением в хранилище данных на уровне доступа к данным EF с одним общим кодом.

Вы должны избавиться от 2 строк кода, в которых вы Установите флаги обновления и пусть все это происходит в Context_SavingChanges () подобно тому, как это было описанов приведенной выше ссылке.Поскольку вы находитесь в веб-сценарии, вы должны передать User.Identity.Name обратно в ваш метод Repository.Save () и затем вызвать Repository.GetUserID () для Context_SavingChanges () .

Таким образом, вам не нужно обновлять эти 2 свойства каждый раз, когда вы вставляете или обновляете объект в хранилище данных.Все автоматически произойдет в одном месте перед сохранением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...