ASP.net HTTP在自动递增行ID时发布

时间:2015-06-16 20:41:44

标签: sql asp.net asp.net-mvc http

我在ASP.net中使用Web API,允许HTTP Posts更新映射的SQL数据库。

我希望每次插入新行时,Id都会自动递增1。表定义如下:

CREATE TABLE [dbo].[PoolTests] (
[Id]     INT            IDENTITY (1, 1),
[SiteID] NVARCHAR (128) NOT NULL,
[Date]   NVARCHAR (MAX) NULL,
[Tub]    NVARCHAR (MAX) NULL,
[par1]   FLOAT (53)     NOT NULL,
[par2]   FLOAT (53)     NOT NULL,
[par3]   FLOAT (53)     NOT NULL,
[par4]   FLOAT (53)     NOT NULL
);

我已将表格映射到一个类:

    public class PoolTest
    {
       public int Id { get; set; }
       public string SiteID { get; set; }
       public string Date { get; set; }
       public string Tub { get; set; }
       public double par1 { get; set; }
       public double par2 { get; set; }
       public double par3 { get; set; }
       public double par4 { get; set; }
    }

我是通过HTTP Post Request

将数据添加到数据库中
        // POST: api/PoolTests
        [ResponseType(typeof(PoolTest))]
        public IHttpActionResult PostPoolTest([FromBody]PoolTest poolTest)
        {
            if (!ModelState.IsValid)
            {
              return BadRequest(ModelState);
            }

            db.PoolTests.Add(poolTest);
            db.SaveChanges();

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

问题是我发送的请求是否包含Id,即:

{"Id": 1, "SiteID": "sample string 2", "Date": "sample string 3", "Tub": "sample string 5", "par1": 5.1, "par2": 6.1, "par3": 7.1, "par4": 8}

然后我得到了这个例外:

“自创建数据库以来,支持'WebApplicationMVCContext'上下文的模型已更改。请考虑使用Code First Migrations更新数据库

在第db.PoolTests.Add(poolTest);

或者如果我省略发送Id

{ "SiteID": "sample string 2", "Date": "sample string 3", "Tub": "sample string 5", "par1": 5.1, "par2": 6.1, "par3": 7.1, "par4": 8}

因为它是一个自动递增字段,所以我不接受VS异常,但fiddler报告

  

400 HTTP localhost:53660 / api / PoolTests 149 no-cache;过期:-1 application / json; charset = utf-8 fiddler:6644

所以我不确定问题是否来自我使用自动递增行Id配置表的方式,即模型类到HTTP请求数据库的映射?

1 个答案:

答案 0 :(得分:2)

该异常意味着您的模型类与数据库表完全不匹配。

如果您处于数据库优先方案(您设计数据库然后创建类),那么您应该添加一个" ADO.NET实体数据模型"到您的项目并选择Code First from Database选项。

这将根据您的数据库结构自动为您的项目生成所有类。

为此,请查看本指南,逐步说明如何制作: https://msdn.microsoft.com/en-us/library/jj200620.aspx