gpt4 book ai didi

c# - Web API 错误 : "Cannot insert the value NULL into column ' Id'

转载 作者:太空宇宙 更新时间:2023-11-03 23:32:54 24 4
gpt4 key购买 nike

我正在使用 Web API 并使用 fiddler 中的 get 方法和表中的一些示例数据,我可以从中获取数据。

当我尝试使用 post 方法插入新记录时,出现错误:

"Cannot insert the value NULL into column 'Id', table 'Members'; column does not allow nulls. INSERT fails. The statement has been terminated."

问题是,我实际上是在 JSON 字符串中为 Id 提供值。我正在复制从 get/id 方法中获取的 json 字符串,只是更改了 Id。

我在表中确实有一个名为 Id 的列,该列设置为不允许空值,并且未设置为自动递增。这是因为系统的要求只要求它存在且唯一。它不必是连续的。所以我希望插入的人能够提供他们自己的 ID。

我不明白为什么会出现此错误,因为我正在提供所需的所有数据。

这是数据库:

enter image description here

这是我的 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);
}

enter image description here

成员类,根据要求:

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)

如果能帮助我找到问题,我将不胜感激。

最佳答案

我要感谢这里的每一个人的帮助...你们真的很棒。

经过数小时的挖掘,我终于找到了一个可行的解决方案,鉴于我使用 S/O 作为自己的引用,我决定将它放在这里。如果有人能想到一个可行的替代方案,我真的很想听听。

这是我的解决方案:

在上面的 EF 自动生成的成员类中:

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

只需添加这一行:

public partial class Members
{
[DatabaseGenerated(DatabaseGeneratedOption.None)]
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; }
}

希望对大家有所帮助,再次感谢大家的帮助。

关于c# - Web API 错误 : "Cannot insert the value NULL into column ' Id',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31528627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com