EF Code First INSERT语句与FOREIGN KEY约束冲突

Quo*_*ter 5 c# runtime-error ef-code-first entity-framework-6 asp.net-identity

当我尝试在数据库中插入记录时,我收到以下错误消息:

INSERT语句与FOREIGN KEY约束"FK_dbo.Order_dbo.AspNetUsers_UserId"冲突.冲突发生在数据库"Test",表"dbo.AspNetUsers",列"Id"中.该语句已终止.

免责声明:我知道之前已经问过这个问题(这里,这里这里),但没有一个答案帮我修复了这个错误.

以下是模型:

[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; }
}
Run Code Online (Sandbox Code Playgroud)

插入新代码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;
}
Run Code Online (Sandbox Code Playgroud)

错误是在这一行抛出: _dbContext.SaveChanges(); // this is where the error msg is being thrown.

调试时我可以看到它UserId = userId,有一个值.

那么为什么我收到此错误消息?

Sla*_*uma 8

AspNetUsers数据库中的表必须包含一个记录,其UserId列具有您userId在新订单中设置的值.Order.UserId不仅是必需的,而且还是AspNetUsers表的外键(参见[ForeignKey("UserId")]属性Order).因此,Order.UserId具有任何值(!= null)是不够的,它必须具有与AspNetUsers表中的记录对应的值.

该例外意味着AspNetUsers表中不存在此类记录.