我试图删除我的一个实体,但我收到了一个奇怪的错误。
我删除的代码如下所示:
public bool Delete()
{
using (var context = new DbContext())
{
context.Set(this.GetType()).Attach(this);
context.Entry(this).State = EntityState.Deleted;
context.SaveChanges();
}
}此方法是我的实体的一部分,它附加自己(当前实体),并将国家更改为已删除。
在context.SaveChanges();行上,我收到了错误消息:
翻译的消息(我自己翻译):
执行被中止:关系无法更改,因为至少对于一个外键属性,不允许空值。当关系被修改时,相关的foreignkey属性被设置为空值.如果foreignkey不支持空值,则必须指定一个新的关系,或者将foreignkey属性设置为不同的非空值,或者删除非相关对象。
原始消息:
ge ist fehlgeschlagen: Die Beziehung konnte nicht ge ndert werden,da für werden eine der Fremdschlüsseleigenschaften keine NULL-Werte zul ssig sind。Wenn eine Beziehung ge ndert wird,verwandteüsseleigenschaft auf einen NULL-Wert festgelegt。Wenn der Fremdschlüssel keine NULL-Werte unterstützt,muss eine neue Beziehung,die Fremdschlüsseleigenschaft einem anderen nicht -Wert zugeordnet oder das nicht verwandte Objekt gel scht。
当我附加我的对象时,关系似乎是intakt,一旦我将状态更改为删除,NavigationProperties get设置为NULL,但如果我只想要一个简单的delete命令,那么EF为什么要尝试更改关系呢?
编辑:
如下文评论所建议。我已经将我的表之间的关联设置为让级联删除,但由于某种原因,它被忽略了。
我的协会是这样的:
End1 Multiplicity - 1 (One of TabAdjust)
End1 Navigation Property - TabAdjustAccounts
End1 OnDelete - Cascade
End1 Role Name - TabAdjsut
End2 Multiplicity - * (collection of TabAdjustAccount)
End2 Navigation Property - TabAdjust
End2 OnDelete - None
End2 Role Name - TabAdjustAccount
Name - CS_TABADJUSTTABADJUSTACCOUNT
Referential Contraint - TabAdjust -> TabAdjustAccountTabAdjustAccount.与TabAdjust的1:N关系
在我的示例中,我试图删除TabAdjust,一旦我将状态更改为已删除,TabAdjustAccounts导航属性就会被清除,TabAdjustAccounts属性在该行中包含项。
Edit2:
我使用的是DataBase第一种方法。
Edit3:
请看我下面的答案,也许你可以解释一下为什么这个变化会产生影响。
发布于 2013-12-13 15:30:20
不知道它是错误还是特性,但是当我从下面更改代码时:
public bool Delete()
{
using (var context = new DbContext())
{
context.Set(this.GetType()).Attach(this);
context.Entry(this).State = EntityState.Deleted;
context.SaveChanges();
}
}对此:
public bool Delete()
{
using (var context = new DbContext())
{
context.Set(this.GetType()).Attach(this);
context.Set(this.GetType()).Remove(this); // <-- changed line...
context.SaveChanges();
}
}一切正常工作,级联删除成功启动。
我不会接受这个答案,因为也许有人知道原因。
发布于 2015-05-19 09:05:24
在我自己的项目中,这个问题与甲骨文有关。在Oracle.ManagedDataAccess 4.1.112.1中,通过"context.Entry(this).State = EntityState.Deleted;“调用运行良好。
在更新到4.121.2.0相同的问题后,级联删除不再启动。
您使用“context.Set(this.GetType()).Remove(This)”的方法也适用于我。但是Oracles插入和删除对象的正确方法是:
public bool Delete()
{
using (var context = new DbContext())
{
context.MyEntityType.Remove(this);
//context.DeleteObject(this); <- in older versioned context
context.SaveChanges();
}
}Oracle Docu:插入和删除
https://stackoverflow.com/questions/20564575
复制相似问题