当我试图向数据库上下文中添加项目时,会出现以下错误。 我正在Web API项目中使用Entity Framework。 下面显示了示例代码。
异常
System.Data.Entity.Infrastructure.DbUpdateException HResult=0x80131501 Message=更新条目时发生错误。 有关详细信息,请参见内部异常。 Source=EntityFramework StackTrace: 在System.Data.Entity.Internal.InternalContext.SaveChanges() 中 在 System.Data.Entity.Internal.LazyInternalContext.SaveChanges() 中 在 System.Data.Entity.DbContext.SaveChanges() 中 在WebApiSample.Controllers.OrdersController.Orders(Order neworder)中 C:\ Repository \ bitbucket \ OtherProjects \ WebApiSample \ WebApiSample \ Controllers \ OrdersController.cs的第173行 在System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor。<> c__DisplayClass10.b__9(Object instance,Object [] methodParameters)中 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance,Object [] arguments)中 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext,IDictionary`2 arguments,CancellationToken cancellationToken)中
内部异常1:UpdateException:更新条目时发生错误。 有关详细信息,请参见内部异常。
内部异常2:SqlException:无法将值NULL插入到列“OrderNumber”,表格'C:\ REPOSITORY \ BITBUCKET \ OTHERPROJECTS \ WEBAPISAMPLE \ WEBAPISAMPLE \ APP_DATA \ DATA.MDF.dbo.Orders'中,该列不允许为null。 INSERT失败。 该语句已终止。
此代码编写在Web API的POST方法中:
实体
POST请求体中传递的数据是:
这个问题可能是由什么引起的?我在这里做错了什么?
异常
System.Data.Entity.Infrastructure.DbUpdateException HResult=0x80131501 Message=更新条目时发生错误。 有关详细信息,请参见内部异常。 Source=EntityFramework StackTrace: 在System.Data.Entity.Internal.InternalContext.SaveChanges() 中 在 System.Data.Entity.Internal.LazyInternalContext.SaveChanges() 中 在 System.Data.Entity.DbContext.SaveChanges() 中 在WebApiSample.Controllers.OrdersController.Orders(Order neworder)中 C:\ Repository \ bitbucket \ OtherProjects \ WebApiSample \ WebApiSample \ Controllers \ OrdersController.cs的第173行 在System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor。<> c__DisplayClass10.b__9(Object instance,Object [] methodParameters)中 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance,Object [] arguments)中 在 System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext,IDictionary`2 arguments,CancellationToken cancellationToken)中
内部异常1:UpdateException:更新条目时发生错误。 有关详细信息,请参见内部异常。
内部异常2:SqlException:无法将值NULL插入到列“OrderNumber”,表格'C:\ REPOSITORY \ BITBUCKET \ OTHERPROJECTS \ WEBAPISAMPLE \ WEBAPISAMPLE \ APP_DATA \ DATA.MDF.dbo.Orders'中,该列不允许为null。 INSERT失败。 该语句已终止。
此代码编写在Web API的POST方法中:
[HttpPost]
public IHttpActionResult Orders(Order neworder)
{
if (neworder == null)
{
return BadRequest();
}
string uri = Url.Link("DefaultApi", new { id = neworder.OrderNumber });
try
{
using (OrderContext db = new OrderContext("ConnectionString"))
{
if (neworder == null)
{
return BadRequest();
}
db.Orders.Add(neworder);
db.SaveChanges();
}
}
catch (Exception ex)
{
throw ex;
}
return Created<Order>(uri, neworder);
}
实体
Order
:namespace WebApiSample.Models
{
public class Order
{
[Key]
public int OrderNumber { get; set; }
public Decimal OrderAmount { get; set; }
public DateTime OrderDate { get; set; }
public string CustomerName { get; set; }
public int OrderQty { get; set; }
[Column("ShippingStatusFlag")]
public string ShippingStatus { get; set; }
public virtual ICollection<OrderItems> Items { get; set; }
}
}
OrderItems
实体:namespace WebApiSample.Models
{
[Table("OrderItems")]
public class OrderItems
{
[Key]
[ForeignKey("Order")]
[Column(Order =1)]
public int OrderNumber { get; set; }
[Key]
[Column(Order = 2)]
public int ItemID { get; set; }
[Key]
[Column(Order = 3)]
public int ItemSeq { get; set; }
public Decimal ItemPrice { get; set; }
public string ItemDescription { get; set; }
public int ItemQty { get; set; }
public virtual Order Order { get; set; }
}
}
POST请求体中传递的数据是:
{
"OrderNumber": 9000,
"OrderAmount": 20,
"OrderDate": "2018-01-15T00:00:00",
"CustomerName": "TEST",
"OrderQty": 3,
"ShippingStatus": "N",
"Items": [
{
"OrderNumber": 9000,
"ItemID": 535,
"ItemSeq": 1,
"ItemPrice": 10,
"ItemDescription": "Plantronics Bluetooth Headset",
"ItemQty": 1,
"order": null
},
{
"OrderNumber": 9000,
"ItemID": 536,
"ItemSeq": 2,
"ItemPrice": 5,
"ItemDescription": "Yellow StickyNote 100ct",
"ItemQty": 1,
"order": null
},
{
"OrderNumber": 9000,
"ItemID": 601,
"ItemSeq": 3,
"ItemPrice": 5,
"ItemDescription": "Black Think Permanent Marker",
"ItemQty": 1,
"order": null
}
]
}
这个问题可能是由什么引起的?我在这里做错了什么?
throw ex;
替换为throw;
怎么样? - grek40Order
类中的OrderNumber
属性上设置属性DatabaseGenerated(DatabaseGeneratedOption.None)
。你的模型(期望自动递增键)和数据库/使用之间可能存在不匹配,期望显式键设置...或者OrderNumber
条目是否指向现有的数据库行? - grek40Order
类的OrderNumber
属性上添加[DatabaseGenerated(DatabaseGeneratedOption.None)]
解决了我的问题。谢谢! - BipinR