Код EF Сначала оператор INSERT противоречил ограничениям FOREIGN KEY

asp.net-identity c# ef-code-first entity-framework-6 runtime-error

Вопрос

Когда я пытаюсь вставить запись в базу данных, я получаю это сообщение об ошибке:

Оператор INSERT противоречил ограничениям FOREIGN KEY «FK_dbo.Order_dbo.AspNetUsers_UserId». Конфликт произошел в базе данных «Тест», таблице «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; }
}

Код, который вставляет новый 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, имеет значение.

Так почему я получаю это сообщение об ошибке?

Принятый ответ

Таблица AspNetUsers в базе данных должна содержать запись, чей столбец UserId имеет значение, которое вы задали с userId в новом порядке. Order.UserId требуется не только, но и внешний ключ для таблицы AspNetUsers (см. [ForeignKey("UserId")] в Order ). Таким образом, недостаточно, чтобы Order.UserId имел любое значение (! = Order.UserId ), оно должно иметь значение, соответствующее записи в таблице AspNetUsers .

Исключение означает, что такая запись отсутствует в таблице AspNetUsers .



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему