Обновление строки базы данных из модели - PullRequest
0 голосов
/ 31 мая 2010

У меня есть несколько проблем при обновлении строки в моей базе данных с использованием Linq2Sql.

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

Мои модельные методы, такие как:

public void Update(Activity activity)
{
    _db.Activities.InsertOnSubmit(activity);
}


public void Save()
{
    _db.SubmitChanges();
}

и код в моем контроллере нравится как:

[HttpPost]
public ActionResult Edit(Activity activity)
{
    if (ModelState.IsValid)
    {
        UpdateModel<Activity>(activity);
        _activitiesModel.Update(activity);
        _activitiesModel.Save();
    }
    return View(activity);
}

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

Я также пытался повторно присоединить объект модели обратно к источнику данных, но это выдает ошибку, поскольку элемент уже существует.

Будем весьма благодарны за любые указатели в правильном направлении.

UPDATE:

Я использую инъекцию зависимости, чтобы создать экземпляр объекта datacontext следующим образом:

IMyDataContext _db;

public ActivitiesModel(IMyDataContext db)
{
    _db = db;
}

Ответы [ 2 ]

0 голосов
/ 03 июня 2010

Я исправил эту проблему, повторно получив и обновив мой объект в методе Update.

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

[HttpPost]
public ActionResult Edit(Activity activity)
{
  Activity myActivity = activitiesModel.getActivityById(activity.id);
  myActivity.name = activity.name;
  myActivity.date = activity.date;
  _dbContext.SubmitChanges();
  return View(activity);
}

Это не мой точный код, а если быть более точным, я создал еще один частичный класс для своего текста данных и сохранил там свой код обновления.

0 голосов
/ 01 июня 2010

В случае использования метода InsertOnSubmit должна быть вставка, это ожидаемое поведение.
Мы рекомендуем использовать метод Attach () в вашей реализации метода Update (). Если в сущности есть столбец IsVersion, тогда все просто, в другом случае вам придется передавать исходные значения также в вызов Attach. Более подробная информация доступна здесь, в MSDN .

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