Деактивирайте Cascade Delete EF6

Опитвам се да деактивирам каскадното изтриване, като първо използвам EF6 код.

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
    modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
}

Когато се опитам да изтрия запис в таблицата, получавам грешка

„Стойността на първичния ключ не може да бъде изтрита, тъй като препратките към този ключ все още съществуват. [Име на ограничение за външен ключ = FK_dbo.OperatorActivity_dbo.Operator_OperatorId]“

Моите модели

public class OperatorActivity
{
    public Guid Id { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime? EndDate { get; set; }
    public bool Synched { get; set; }

    public virtual Station Station { get; set; }
    public Guid StationId { get; set; }

    public virtual Operator Operator { get; set; }
    public Guid OperatorId { get; set; }
}

public class Operator
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string LastName { get; set; }
    public string Login { get; set; }
    public byte[] Password { get; set; }

    public virtual  Network Network { get; set; }

    public virtual ICollection<Station> Stations { get; set; }
    public virtual ICollection<OperatorActivity> Activities { get; set; }
    public virtual ICollection<Refill> Refills { get; set; }

    public override string ToString()
    {
        return this.Name + " " + this.LastName;
    }
}

Как мога да деактивирам каскадното изтриване?


person Eugene Belov    schedule 03.07.2015    source източник
comment
Опитвате се първо да премахнете основния ред на таблицата, докато първо трябва да изтриете свързаните редове.   -  person Ormoz    schedule 03.07.2015
comment
Опитвам се да изтрия таблицата на оператора първо. Трябва да изтрия само таблицата Operator и да запазя всички данни в таблицата OperatorActivity.   -  person Eugene Belov    schedule 03.07.2015
comment
Не е възможно поради връзка с външен ключ. drop foreign key FK_dbo.OperatorActivity_dbo.Operator_OperatorId в база данни   -  person Ormoz    schedule 03.07.2015


Отговори (1)


Въпреки че не е логично да премахвате референтни (родителски) редове, като същевременно запазвате дъщерни редове, за да ви бъде позволено да направите това, трябва да премахнете ограничението за външен ключ.

В MySQL базата данни стартирайте:

alter table OperatorActivity drop 
foreign key FK_dbo.OperatorActivity_dbo.Operator_OperatorId

В SQL Server:

alter table OperatorActivity drop 
constraint FK_dbo.OperatorActivity_dbo.Operator_OperatorId
person Ormoz    schedule 03.07.2015