ASP.NET MVC: запись не добавляется в базу данных после POST - PullRequest
0 голосов
/ 23 января 2011
[HttpPost]
public ActionResult Create(FormCollection collection)
{
    UpdateModel(collection);
    context.SaveChanges();
    return RedirectToAction("Index", new {controller = "Home"});
}

Действие выполнено успешно, но в базу данных не было внесено ни одной записи.Почему?

Я не хочу создавать объект вручную, получая каждое значение из каждого поля в коллекции форм.

Ответы [ 2 ]

1 голос
/ 23 января 2011
UpdateModel(collection);
context.SaveChanges();

Вы не внесли никаких изменений в контекст, чтобы ожидать сохранения чего-либо. Entity Framework (при условии, что это то, что вы используете) работает с объектами. Итак, вам нужна модель и сохраните эту модель в базе данных. Таким образом, действие вашего контроллера может выглядеть так:

[HttpPost]
public ActionResult Create(Product product)
{
    _repository.Create(product);
    return RedirectToAction("Index", new {controller = "Home"});
}

где переменная _repository - это некоторый интерфейс, который определяет операции в ваших моделях. Использование интерфейса позволяет отделить логику доступа к данным от логики контроллера. В реализации этого репозитория вы можете использовать любую понравившуюся вам технологию доступа к данным, такую ​​как EF или NHibernate, просто ваш контроллер не должен об этом знать.

0 голосов
/ 23 января 2011

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

 context.Customers.Attach(myCustomre);
 context.ObjectStateManager.ChangeObjectState(myCustomre, System.Data.EntityState.Modified);
 context.SaveChanges();

и для вставки:

context.Customers.AddObject(newCustomer);
                context.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...