controller action方法更新并向数据库添加属性

时间:2014-10-13 17:51:10

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

在使用实体框架的ASP.NET MVC应用程序中,我有一个Edit视图,我在其中一个实体模型上更新了一些属性。我想加一个"添加"如果用户想要添加该类型的新属性(但不删除旧条目,我理解这需要这些类型的属性的列表),其中一个属性的按钮。当我单击此添加按钮时,使用Ajax.ActionLink将从局部视图中检索新的Html.EditorFor帮助程序并将其添加到当前表单。

目前我的ActionMethod看起来只是更新已经存在的字段,我可以添加什么样的逻辑来说"如果这是一个新属性,那么db.Add"?

这是我的方法现在的样子:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult TimeSeriesData(List<TimeSeriesData> List1)
{
    int empid = List1[0].EmployeeID;
    if (ModelState.IsValid)
    {
        foreach (TimeSeriesData ln in List1)
        {
            db.Entry(ln).State = EntityState.Modified;
        }
        db.SaveChanges();
        return RedirectToAction("Edit", new { id = empid });
    }
    return new EmptyResult();
}

我想在foreach循环中的某处添加逻辑,并说明列表中的项目是否为新项目,然后是db.MyModel.List.Add(item);,但我不确定如何检查列表item是新的

会是什么样的

if (newproperty.propertyid == null) {
 db.MyModel.List.Add(newproperty);
}

如果您需要更多说明,请告诉我

修改

或者问我问题的另一种方法是:如何检查数据库中是否已存在该项目,

模型:

//summarized
class Employee {
 int EmployeeID {get;set;}
 List<TimeSeriesData> TimeSeriesData {get;set;}
}
class TimeSeriesData {
 int TimeSeriesDataID {get; set;}
 int EmployeeID {get;set;}
 string Value {get;set;}
 [ForeignKey("EmployeeID")]
 public Employee Employee { get; set; }
}

1 个答案:

答案 0 :(得分:1)

您的代码结构中存在问题。如果您注意到,

 db.Entry(ln).State = EntityState.Modified;

您只是更新/编辑该特定实体而不添加属性。而且,我认为你有点错过了一些逻辑。

如果您要为其添加其他属性,则应将其放在单独的表中,并将其引用到父表的主键。这样,添加其他值就不会有任何问题。

要回答第二个问题,您可以使用上下文的.Any属性来检查数据库中是否存在该项。你可以这样:

var db = new Context();
if(!db.mytable.Any(m => m.field == value)){
    db.mytable.Add(value);
    db.SaveChanges();
}

如果您有任何疑问,请随时提出。