Я использую mvc5 и Entity Framework для миграции кода
Я попытался заполнить таблицу, и я получил это сообщение об ошибке:
The INSERT statement conflicted with the FOREIGN KEY constraint
"FK_dbo.Orders_dbo.Users_UserId". The conflict occurred in database
"DbDemo.Models.DbbContext", table "dbo.Users", column 'Id'.
The statement has been terminated.
Я знаю, что поговорка о том, что данные должны уже существовать в таблице пользователей перед заполнением заказов, но userid
у пользователей - это первичный ключ, поэтому я предположил, что он автоматически заполняется из-за своей идентичности = true! так почему я получил эту ошибку?
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public string PhoneNum { get; set; }
public string Location { get; set; }
public string Type { get; set; }
}
public class Order
{
[Key]
[Column(Order = 1)]
public int Id { get; set; }
//ForeignKey from Items table for the composite key
[Key]
[Column(Order = 2)]
public int? ItemId { get; set; }
public Item Item { get; set; }
//ForeignKey from Users table
public int? UserId { get; set; }
public User User { get; set; }
public int Quantity { get; set; }
public int? TotalPrice { get; set; } //why did i put this field??!
}
Это начальная миграция пользователя:
public partial class UsersSeed : DbMigration
{
public override void Up()
{
Sql("insert into Users (Name,Email,Password,PhoneNum,Location,Type) values ('Khaled Tahboub', 'khaledk.tahboub@gmail.com', 'abc@123', '0797504280', 'Amman', 'A')");
Sql("insert into Users (Name,Email,Password,PhoneNum,Location,Type) values ('Muath Mustafa', 'muathmustafa@gmail.com', 'abc@123', '0797504280', 'Amman', 'A')");
Sql("insert into Users (Name,Email,Password,PhoneNum,Location,Type) values ('John Doe', 'JohnDoe@gmail.com', 'abc@123', '0797504280', 'Amman', 'B')");
}
public override void Down()
{
}
}
А это начальная миграция заказов:
public partial class OrdersSeed : DbMigration
{
public override void Up()
{
Sql("insert into Orders (UserId, ItemId, Quantity) values (1, 1, 1)");
}
public override void Down()
{
}
}