我对MVC很新,所以请耐心等待。这是我正在处理的MVC项目中我的控制器中的动作代码:
[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中对此进行了调试,每一步都没有错误,即我的实体框架中存在“用户”,我的'form'包含一个传递给'fName'的值。但是,在SSMS 2008中运行SQlProfiler不会显示任何活动(显然不会在我的数据库中记录)。我的实体框架在此数据库上建模,因为当我对实体进行更新时,数据库中的更改会反映在EF中。
我不知道为什么SaveChanges()无效。有人可以帮忙吗?
答案 0 :(得分:4)
如果要更新实体,则需要将usr对象连接到db上下文并将其标记为已修改。
db.Attach(usr);
db.Context.Entry(usr).State = EntityState.Modified;
如果是新的,您需要通过以下方式添加:
db.Add(usr);
然后打电话给你
db.SaveChanges()
答案 1 :(得分:1)
我会推荐以下内容:
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 */
}
这假定您正在创建一个新用户,而Users是您的用户对象的DbSet,并且您的User对象具有int或int类型的属性“PayMonthOne”。