MySQL+;实体框架:Can';不要删除对象
我试图通过实体框架(MySQL/Connector)删除一个具有外键关系的对象 客户帐户>>>客户邮箱地址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
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