EntityFramework При попытке создать несколько ссылок на одну и ту же таблицу ошибка FK Constraint - PullRequest
1 голос
/ 13 марта 2019

У меня есть таблица с именем DeliveryRequest и другая таблица с именем Operator, таблица DeliveryRequest выглядит следующим образом:

public class DeliveryRequest
{
    public int ID { get; set; }
    public DateTime Date { get; set; }
    public string UserID { get; set; }
    public string Waybill { get; set; }
    public string Reference { get; set; }
    public int SupplierID { get; set; }
    public Supplier Supplier { get; set; }
    //[ForeignKey("Operator")]
    public int SenderID { get; set; }
    public Operator Sender { get; set; }
    //[ForeignKey("Operator")]
    public int ReceiverID { get; set; }
    public Operator Receiver { get; set; }
    public string Origin { get; set; }
    public string Destination { get; set; }
    public int ServiceID { get; set; }
    public Service Service { get; set; }
}

И таблица Operator выглядит следующим образом:

public class Operator
{
    public int ID { get; set; }
    public string Company { get; set; }
    public int ContactID { get; set; }
    public Contact Contact { get; set; }
    public int AddressID { get; set; }
    public Address Address { get; set; }
}

Итак, проблема в том,, когда я пытаюсь обновить свою базу данных, я получаю сообщение об ошибке FK Constraint следующим образом:

Введение ограничения FOREIGN KEY 'FK_dbo.DeliveryRequests_dbo.Operators_SenderID' в таблице 'DeliveryRequests' может вызвать циклы или несколько каскадных путей,Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION, либо измените другие ограничения FOREIGN KEY.Не удалось создать ограничение или индекс.Смотрите предыдущие ошибки.

И предыдущая ошибка такая же.Следующее:

System.Data.SqlClient.SqlException (0x80131904): Введение ограничения FOREIGN KEY 'FK_dbo.DeliveryRequests_dbo.Operators_SenderID' в таблице 'DeliveryRequests' может вызывать циклы или несколько каскадных путей.Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION, либо измените другие ограничения FOREIGN KEY.

Сосредоточьтесь на отправителе и получателе, я не эксперт, но там должна быть ошибка lol

//[ForeignKey("Operator")]
public int SenderID { get; set; }
public Operator Sender { get; set; }
//[ForeignKey("Operator")]
public int ReceiverID { get; set; }
public Operator Receiver { get; set; }

1 Ответ

1 голос
/ 13 марта 2019

Похоже, вы используете Code First подход.Поэтому попробуйте отключить CascadeDelete для DeliveryRequests:

modelBuilder.Entity<DeliveryRequests>()
    .HasRequired(c => c.Operator )
    .WithMany()
    .WillCascadeOnDelete(false);

Например:

public class YourDBContext: DbContext 
{
    public YourDBContext(): base() 
    {
    }


    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<DeliveryRequests>()
            .HasRequired(c => c.Operator )
            .WithMany()
            .WillCascadeOnDelete(false);    
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...