2013-06-11 4 views
1

Я довольно новичок в MVC, поэтому, пожалуйста, будьте терпеливы. Вот мой код действия в мой контроллер в проекте MVC, я работаю над:SaveChanges() не сохраняет данные

[HttpPost] 
public ActionResult Create(User usr , string submitBtn, FormCollection form, int id) 
{ 
    var db = new UsrSqlEntities(); 

    foreach (string fm in form) 
    { 
     if (fm.Contains("PayMonthOne")) 
      usr.fName = Int32.Parse(form[fm]); 

    } 

    db.SaveChanges(); 
} 

Я отлажена это в VS2010, и каждый шаг проходит без ошибок, то существует «Пользователь» в моем Entity Framework, мой 'form' содержит значение, которое переходит к 'fName'. Однако запуск SQlProfiler в SSMS 2008 не показывает никакой активности (и, очевидно, не записывается в моей базе данных). Моя структура сущности смоделирована на этом db, поскольку, когда я делаю обновление для объекта, изменения в db отражают в EF.

Я не знаю, почему SaveChanges() не работает. Может ли кто-нибудь помочь?

ответ

2

Если вы обновляете объект, вам нужно будет подключить объект usr к контексту db и пометить его как измененный.

db.Attach(usr); 
db.Context.Entry(usr).State = EntityState.Modified; 

Если это новое вам нужно добавить его через:

db.Add(usr); 

Затем вызовите ваш

db.SaveChanges() 
+0

Действительно. Как только он переходит к клиенту и возвращается, ссылка DB исчезает, и ее нужно снова искать. –

+0

Не существует опции «Контекст» для intellisense с моей базой только для контекста. – user2284341

+0

try 'db.Entry (usr) .State = EntityState.Modified;' –

0

Я бы рекомендовал следующее:

var db=new UsrSqlEntities(); /* Module Level declaration */ 

    [HttpPost] 
    public ActionResult Create(User usr) 
    { 
     db.Users.Add(usr); /* Add usr object to Users DbSet */ 

     db.SaveChanges(); /* Save all changes to the database */ 
    } 

Этот Предполагается, что вы создаете нового пользователя, а пользователи - ваши объекты DbSet для пользователя, а ваш объект User имеет свойство «PayMonthOne» типа int или int ?.

+0

Буду ли я прав, если «Пользователи» будут проверять флажок «Плюрализ» при создании EF? Если да, то мой EF не был создан таким образом, чтобы объяснить мой предыдущий комментарий (AddTo для каждой таблицы?). – user2284341

+0

Да, поле pluralize изменит таблицу с именем «Пользователь» на DbSet с именем «Пользователи», который содержит коллекцию «Пользователь». Но я не уверен, откуда приходит AddTo. Вы используете DbContext? Что такое базовый класс UsrSqlEntities? –

+0

Базовый класс - ObjectContext. – user2284341

Смежные вопросы