实体未保存到数据库

时间:2014-03-14 10:50:10

标签: c# sql .net asp.net-mvc entity

我有一个像这样的编辑动作:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(CompositeModel cm)
{
    if (ModelState.IsValid)
    {
        try
        {
            db.Entry(cm.model_1).State = EntityState.Modified;
            db.SaveChanges();
            if (cm.model_2List == null) return View(cm);
            foreach (var model in cm.model_2List)
            {
                var row = ( from s in db.model_2
                            where s.rid == model.rid
                            select s).FirstOrDefault();
                row = model;
                db.Entry(row).State = EntityState.Modified;
                db.SaveChanges();
            }
        }
        catch (Exception ex) { log(); }
    }
    return View(cm);
}

第一个db.SaveChangesa()将更改保存到数据库,但第二个(在循环中)不保存。 model_2是从没有ID列的数据库表构建的,这就是我通过rid列查找行的原因(它包含一个唯一的guid,它没有被归类为id列,我不知道如何为列分配uniqueidentifier类型,也许这将解决我的问题。)

我做错了什么?

修改

我已经做了一些测试,似乎问题在于这个表没有主键列。我有一段类似的代码:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(CompositeModel2 cm2)
{
    if (ModelState.IsValid)
    {
        try
        {
            db.Entry(cm2.Model_3).State = EntityState.Modified;
            db.SaveChanges();
            if (cm2.Model_4List == null) return View(cm2);
            foreach (var model in cm2.Model_4List)
            {
                db.Entry(model).State = EntityState.Modified;
                db.SaveChanges();
            }
        }
        catch (Exception ex) { log(); }
     }
    return View(cm2);
}

按预期工作。

1 个答案:

答案 0 :(得分:0)

经过一些工作,我设法通过在数据库上运行sql语句来解决我的问题:

ALTER table [db].[dbo].[table]
ADD id uniqueidentifier PRIMARY KEY NOT NULL DEFAULT NEWID()
GO

这解决了实体在桌子上遇到的问题。