【发布时间】:2015-07-21 00:47:07
【问题描述】:
我正在使用 Web API 并使用 fiddler 中的 get 方法以及表中的一些示例数据,我可以从中获取数据。
当我尝试使用 post 方法插入新记录时,出现错误:
“无法将值 NULL 插入到列 'Id'、表 'Members' 中;列不允许空值。INSERT 失败。语句已终止。”
问题是,我实际上是在 JSON 字符串中提供 Id 的值。我正在复制从 get/id 方法获得的 json 字符串,只是更改了 Id。
我确实在表上有一个名为Id 的列,该列设置为不允许空值,并且未设置为自动递增。这是因为系统的要求只要求它存在且唯一。它不必是顺序的。所以我希望插入的人能够提供他们自己的 ID。
我不明白为什么会出现这个错误,因为我提供了所有需要的数据。
这是数据库:
这是我的 JSON 字符串:
{
"Id":687,
"FirstName":"auto",
"EMail":"auto",
"Eligible":true,
"InsertLogtime":"2015-07-21T00:51:59.917"
}
这是服务器端代码:抱歉没有包含它。当我在调试器中介入时,成员类实际上是用一个 Id 初始化的。
// POST api/Members
[ResponseType(typeof(Members))]
public IHttpActionResult PostMembers(Members members)
{
if (!ModelState.IsValid)
return BadRequest(ModelState);
db.Members.Add(members);
db.SaveChanges();
return CreatedAtRoute("DefaultApi", new { id = members.Id }, members);
}
Members 类,按要求:
public partial class Members
{
public int Id { get; set; }
public string FirstName { get; set; }
public string EMail { get; set; }
public Nullable<bool> Eligible { get; set; }
public Nullable<System.DateTime> InsertLogtime { get; set; }
}
下面是最外面的异常堆栈跟踪...
at System.Data.Entity.Internal.InternalContext.SaveChanges()
at System.Data.Entity.Internal.LazyInternalContext.SaveChanges()
at System.Data.Entity.DbContext.SaveChanges()
at Xyz.Service.Controllers.MembersController.PostMembers(Members members) in c:\Repositories\Xyz\Xyz.Service\Controllers\MembersController.cs:line 41
at lambda_method(Closure , Object , Object[] )
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)
如果您能帮我找出问题,我将不胜感激。
【问题讨论】:
-
能否请您发布在服务器端实际处理 POST/PUT 请求的代码?仅仅因为您发送带有 ID 的 JSON 数据并不意味着服务器正在使用它做任何事情
-
我现在才插入,抱歉,谢谢。
-
Members 类在哪里????
-
我现在才插入,抱歉,谢谢。它是由 EF 自动生成的。
-
成员类是 EF 从数据库中自动生成的。所以我想如果它是必需的,那么它就会在那里。但不确定。感谢您的帮助。
标签: c# sql-server entity-framework asp.net-web-api