自动生成ID(WEB API2)

时间:2017-07-05 13:06:21

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

我有WebAPI2项目。

我控制器我有POST方法

 [ResponseType(typeof(StartWorkingDay))]
    public IHttpActionResult PostStartWorkingDay(StartWorkingDay startWorkingDay)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        db.StartWorkingDays.Add(startWorkingDay);

        try
        {
            db.SaveChanges();
        }
        catch (DbUpdateException)
        {
            if (StartWorkingDayExists(startWorkingDay.Id))
            {
                return Conflict();
            }
            else
            {
                throw;
            }
        }

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

这是我的模特:

 public partial class StartWorkingDay
{
    public int Id { get; set; }
    public string Company { get; set; }
    public string Date { get; set; }
    public string Time { get; set; }
    public string INN { get; set; }
}

此时我需要在发送帖子请求时添加ID。

当我发送第一个请求时,它会使用id:0

在表格中创建数据

下一个请求是空响应,表中没有数据。

如何自动生成ID?

1 个答案:

答案 0 :(得分:1)

您应该在数据库端生成id。使用DatabaseGenerated属性很容易。通过这种方式实现在插入行上生成id值:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }

或者使用流畅的配置

modelBuilder.Entity<StartWorkingDay>().Property(d => d.Id)
    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

修改配置后,请确保将更改传播到数据库。如果您使用DropCreateDatabaseAlwaysDropCreateDatabaseIfModelChanges数据库初始化程序,则会自动执行此操作。