【问题标题】:MySQL + Entity Framework: Can't delete objectMySQL + Entity Framework:无法删除对象
【发布时间】:2011-08-23 20:27:23
【问题描述】:

我正在尝试通过实体框架(MySQL/连接器)删除具有外键关系的对象。

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

.. 但是当我这样做时,我收到以下错误:

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

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

【问题讨论】:

    标签: mysql entity-framework cascading-deletes


    【解决方案1】:

    问题是这样的:

    stub.FkClientEmailAddresses.Clear();
    

    不删除关系。它仅将相关实体中的 FK 设置为 null。如果您希望它们真正删除,您必须:

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

    【讨论】:

    • 谢谢。我认为我们将重新检查我们的结构以确定我们是否真的需要级联。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    相关资源
    最近更新 更多