MySQL + Entity Framework : Can't delete object

标签 mysql entity-framework cascading-deletes

我正在尝试通过 Entity Framework (MySQL/Connector) 删除具有外键关系的对象。

ClientAccount>>> ClientEmailAddresses

  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();

.. 但是当我这样做时,出现以下错误:

The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted.

我不太确定这会把我留在哪里。我必须先删除 EmailAddress 对象吗?我们对打开级联持谨慎态度,但它看起来越来越像需要整理外键。

最佳答案

问题在于:

stub.FkClientEmailAddresses.Clear();

不删除关系。它只将相关实体中的 FK 设置为 null。如果你想让它们真正删除,你必须:

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

关于MySQL + Entity Framework : Can't delete object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7160357/

相关文章:

c# - 从 EntityFramework 调用存储过程时出错

c# - Entity Framework 有mysql,实体没有PK

mysql - 手动调用级联删除?

mysql - 按周分组返回奇怪的间隔

mysql - 我正在尝试学习 sql 上的触发器并收到以下错误

mysql - 从子查询中获取 2 个结果

entity-framework - 如何使用EF4 Fluent API将删除级联到链接表中?

php mysqli bind_result 返回 1

c# - 使用 LINQ to Entities 对多个级别的子集合进行排序

hibernate - JPA orphanRemoval=true 与 ON DELETE CASCADE DML 子句有何不同