【发布时间】:2014-02-19 13:16:29
【问题描述】:
当我尝试在数据库中插入一条记录时,我收到以下错误消息:
INSERT 语句与 FOREIGN KEY 约束冲突 “FK_dbo.Order_dbo.AspNetUsers_UserId”。冲突发生在 数据库“测试”,表“dbo.AspNetUsers”,列“Id”。这 语句已终止。
免责声明:我知道以前有人问过这个问题(here、here 和 here),但没有一个答案可以帮助我解决这个错误。
以下是模型:
[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; }
}
插入新Order的代码:
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, 有一个值。
那么为什么我会收到此错误消息?
【问题讨论】:
-
我总是先做 DB,但在我看来,它在 ApplicationUsers 中找不到任何满足新订单中的 UserID 的东西。最初表明该用户不在 ApplicationUsers 表中,但是在查看该表的实体时,我看不到 UserID 甚至存在于哪里..?
-
IdentityUser替换MembershipProvider和SimpleMembershipProvider默认包含 UserId,以及更多字段。asp.net-identity标签添加到帖子中。
标签: c# ef-code-first runtime-error entity-framework-6 asp.net-identity