ef代码优先-禁用级联删除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;
    }
}

如何禁用级联删除?

虽然在保留子行的同时删除引用的(父(行是不合乎逻辑的,但要允许这样做,您应该删除外键约束。

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

最新更新