2015-07-03 2 views
2

Я пытаюсь отключить каскадное удаление с использованием кода 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; 
    } 
} 

Как отключить каскадное удаление?

+0

Вы пытаетесь удалить основную строку таблицы первой, в то время как вы должны сначала удалить связанные строки. – Ormoz

+0

Я пытаюсь удалить стол «Operator». Мне нужно удалить только таблицу Operator и сохранить все данные в таблице OperatorActivity. –

+0

Это невозможно из-за отношения внешних ключей. 'drop foreign key FK_dbo.OperatorActivity_dbo.Operator_OperatorId' в базе данных – Ormoz

ответ

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