在db(EF)中输入新数据

时间:2017-09-16 08:47:28

标签: c# asp.net entity-framework linq asp.net-web-api

我在控制器中有方法

它从发布请求接收数据并写入表

这是代码

 [ResponseType(typeof(TimeTable))]
    public IHttpActionResult PostTimeTable(TimeTable timeTable)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }
        if (ModelState.IsValid)
        {
            DateTime dt = DateTime.Today;
            TimeTable c = (from x in db.TimeTables
                where x.Company == timeTable.Company && x.INN == timeTable.INN
                select x).First();
            c.StartPause = timeTable.StartPause;
            c.StartDay = timeTable.StartDay;
            c.EndPause = timeTable.EndPause;
            c.EndDay = timeTable.EndDay;
            db.SaveChanges();
        }

        db.TimeTables.Add(timeTable);
        db.SaveChanges();

        return CreatedAtRoute("DefaultApi", new { id = timeTable.Id }, timeTable);
    }

但是当INN和公司的记录已经在db。

时,它运作良好

但如果它不在数据库中,我需要创建新的条目。

我如何修改此方法?

2 个答案:

答案 0 :(得分:1)

您可以使用标记(exisingCompanyFlag)进行编辑模式或像这样添加新模式

    bool existingCompanyFlag = true;
    TimeTable c = (from x in db.TimeTables
                   where x.Company == timeTable.Company && x.INN == timeTable.INN
                         select x).FirstOrDefult();

    if (c == null)
    {
      existingCompanyFlag = false;
      c = new TimeTable();
    }   
    c.StartPause = timeTable.StartPause;
    c.StartDay = timeTable.StartDay;
    c.EndPause = timeTable.EndPause;
    c.EndDay = timeTable.EndDay;
    if (!existingCompanyFlag)
       db.TimeTables.Add(c);

答案 1 :(得分:1)

您的代码中需要一个单独的分支用于插入案例。

if (ModelState.IsValid) {
  if (addingNewRow) {
    TimeTable tt = new TimeTable {
     // Populate properties (except identity columns)
    };
    db.TimeTables.Add(tt);
  } else {
    // update
  }
  db.SaveChanges();
}

要链接到其他实体,请使用以下方法之一:

  1. 分配实例:

    x.Company = theCompany;
    
  2. 或者,指定实例ID

    x.CompanyId = companyId;

  3. (如果您已经加载了其他实体或者正在创建它,#1会更容易 - EF会对ID进行排序 - 而#2会加载整个其他实体。)