Используется Entity Framework 6, CodeFirst, MS SQL, Asp.Net MVC
Есть простая таблица, цены (на услуги) в заказах
public class PriceInOrder
{
public int Order_Id { get; set; }
public int Price_Id { get; set; }
public decimal Count { get; set; }
}
Первые два поля - составной ключ, о чём описано в OnModelCreating
protected override void OnModelCreating(DbModelBuilder _)
{
...
_.Entity<PriceInOrder>().HasKey(e => new {e.Order_Id, e.Price_Id});
...
}
Теперь потребовалось добавить работников, которые для каждой услуги в заказе.
public class UsersInPriceOrders
{
public string User_Id { get; set; }
public int Order_Id { get; set; }
public int Price_Id { get; set; }
}
и добавил код для связи
protected override void OnModelCreating(DbModelBuilder _)
{
...
_.Entity<UsersInPriceOrders>().HasKey(u => new {u.User_Id, u.Order_Id, u.Price_Id});
_.Entity<UsersInPriceOrders>()
.HasRequired(u => u.User)
.WithMany()
.HasForeignKey(e => e.User_Id).WillCascadeOnDelete(false);
_.Entity<UsersInPriceOrders>()
.HasRequired(u => u.PriceInOrder)
.WithMany()
.HasForeignKey(u => new {u.Order_Id, u.Price_Id}).WillCascadeOnDelete(false);
...
}
Из этого вышла вот такая миграция
public override void Up()
{
CreateTable(
"dbo.UsersInPriceOrders",
c => new
{
User_Id = c.String(nullable: false, maxLength: 128),
Order_Id = c.Int(nullable: false),
Price_Id = c.Int(nullable: false),
})
.PrimaryKey(t => new { t.User_Id, t.Order_Id, t.Price_Id })
.ForeignKey("dbo.PriceOrders", t => new { t.Price_Id, t.Order_Id })
.ForeignKey("dbo.AspNetUsers", t => t.User_Id)
.Index(t => t.User_Id)
.Index(t => new { t.Order_Id, t.Price_Id });
}
Проблема в том, что при накатывании данной миграции происходит ошибка
В таблице "dbo.PriceOrders", на которую имеются ссылки, отсутствуют первичные или потенциальные ключи, соответствующие списку ссылающихся столбцов во внешнем ключе
При этом составной первичный ключ в этой таблице есть
Что я делаю не так?