Как использовать составной ключ одной таблицы в качестве внешнего ключа для составного ключа другой?

Используется 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", на которую имеются ссылки, отсутствуют первичные или потенциальные ключи, соответствующие списку ссылающихся столбцов во внешнем ключе

При этом составной первичный ключ в этой таблице есть

Что я делаю не так?
  • Вопрос задан
  • 1357 просмотров
Пригласить эксперта
Ответы на вопрос 1
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
При этом составной первичный ключ в этой таблице есть. Что я делаю не так?
Не используйте составной ключ. [ID] [int] IDENTITY(1,1) NOT NULL вполне подойдёт.
MICROSOFT SQL SERVER ENTITY FRAMEWORK
Используйте MS SSMS.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы