当我试图在数据库中插入一条记录,我得到这个错误信息:EF代码优先的INSERT语句冲突与外键约束
INSERT语句冲突与外键约束 “FK_dbo .Order_dbo.AspNetUsers_UserId”。冲突发生在 数据库“Test”,表“dbo.AspNetUsers”,列'Id'。 声明已被终止。
声明:我知道这个问题以前(here,here和here)被问过,但没有答案的帮我解决这个错误,我得到。
这里是模型:即插入新Order
[Table("Order")]
public class Order
{
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity), Key]
public int Id { get; set; }
[Required]
public string UserId { get; set; }
public virtual List<OrderDetails> OrderDetails { get; set; }
[ForeignKey("UserId")]
public virtual ApplicationUser User { get; set; }
}
[Table("OrderDetails")]
public class OrderDetails
{
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity), Key]
public int Id { get; set; }
[Required]
public int OrderId { get; set; }
[ForeignKey("OrderId")]
public virtual Order Order { get; set; }
}
public class ApplicationUser : IdentityUser
{
[MaxLength(15)]
public string FirstName { get; set; }
[MaxLength(15)]
public string LastName { get; set; }
[MaxLength(50)]
public string EmailAddress { get; set; }
public virtual List<Order> Orders { get; set; }
}
代码:
public OrderDetails Add(dynamic addOrderDetails, string userId)
{
if (addOrderDetails.OrderId == null)
{
var order = new Order()
{
UserId = userId,
CreateDate = DateTime.Now,
Status = OStatus.InProgress,
Confirmed = (DateTime?)null,
};
var newOrder = _dbContext.Orders.Add(order);
_dbContext.Entry(order).State = EntityState.Added;
_dbContext.SaveChanges(); // this is where the error msg is being thrown.
var orderDetails = new OrderDetails()
{
OrderId = newOrder.Id,
ServiceId = addOrderDetails.ServiceId,
EventStart = start,
EventEnd = end
};
var newOrderDetails = _dbContext.OrderDetails.Add(orderDetails);
_dbContext.Entry(orderDetails).State = EntityState.Added;
_dbContext.SaveChanges();
}
return null;
}
误差以这条线被抛出:_dbContext.SaveChanges(); // this is where the error msg is being thrown.
调试时,我可以看到那UserId = userId,
有一个值。
那么,为什么我得到这个错误信息?
我总是先做数据库,但是在我看来,它无法在ApplicationUsers中找到满足新订单中用户ID的任何内容。最初建议用户不在ApplicationUsers表中,但在查看该表的实体时,我没有看到UserID甚至存在于哪里。? –
'IdentityUser'代替'MembershipProvider'和'SimpleMembershipProvider'默认包含UserId,还有一些字段。 'asp.net-identity'标签添加到帖子中。 – Quoter