Отключить каскадное удаление 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