控制器操作方法来更新属性并将其添加到数据库

本文关键字:添加 数据库 操作方法 更新 属性 控制器 | 更新日期: 2023-09-27 18:26:20

在一个使用实体框架的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);,但我不确定如何检查列表项目是否是新

是像的吗

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; }
}

控制器操作方法来更新属性并将其添加到数据库

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

 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();
}

如果你有任何问题,请随时提问。