MySQL+;实体框架:Can';不要删除对象

MySQL+;实体框架:Can';不要删除对象,mysql,entity-framework,cascading-deletes,Mysql,Entity Framework,Cascading Deletes,我试图通过实体框架(MySQL/Connector)删除一个具有外键关系的对象 客户帐户>>>客户邮箱地址 foreach (ClientAccount client in recsClientStore.Deleted) { ClientAccount stub = new ClientAccount(); stub.Id = client.Id; this.DBContext.AttachTo("ClientAccounts", st

我试图通过实体框架(MySQL/Connector)删除一个具有外键关系的对象

客户帐户>>>客户邮箱地址

  foreach (ClientAccount client in recsClientStore.Deleted) {   
        ClientAccount stub = new ClientAccount();
        stub.Id = client.Id;
        this.DBContext.AttachTo("ClientAccounts", stub);


        stub.FkClientEmailAddresses.Clear();
        this.DBContext.DeleteObject(stub);
    }

    this.DBContext.SaveChanges();
。。但当我这样做时,我会得到以下错误:

操作失败:无法更改关系,因为 一个或多个外键属性不可为空。当 对关系进行更改时,相关的外键属性为 设置为空值。如果外键不支持空值, 必须定义新关系,外键属性必须为 指定了另一个非空值,或者必须为不相关的对象 删除


我真的不确定这会让我怎么样。我必须先删除EmailAddress对象吗?我们对打开cascade很谨慎,但它看起来越来越像是整理外键所必需的。

问题在于:

stub.FkClientEmailAddresses.Clear();
不会删除关系。它仅将相关实体中的FK设置为null。如果您真的想删除它们,您必须:

  • 通过调用对象集上的
    Remove
    来删除它们
  • 将关系更改为-这将使
    清除
    按预期工作
  • 在EDMX和数据库中正确设置级联删除,并且根本不调用Clear

谢谢。我认为我们将重新检查我们的结构,以确定我们是否真的需要级联。