Entity framework 4 为什么删除某些实体实例时引发InvalidOperationException,而删除其他实体实例时引发UpdateException

Entity framework 4 为什么删除某些实体实例时引发InvalidOperationException,而删除其他实体实例时引发UpdateException,entity-framework-4,Entity Framework 4,我为两个实体定义了一对多的关系,比如说客户和订单。该关系表示一个Customer对象可以有多个Order对象,但一个Order必须有一个Customer…一个相当标准的1:M关系 我没有在数据库上配置级联规则,在我的实体数据模型中,OnDeletes设置为None。这意味着不允许删除有订单的客户 我的问题是,当应用程序中的用户删除客户(可能有订单)时,我希望捕获通过强制外键约束引发的异常。对于一个有33个订单的特定客户,我得到InvalidOperationException,但对于另一个只有2

我为两个实体定义了一对多的关系,比如说客户和订单。该关系表示一个Customer对象可以有多个Order对象,但一个Order必须有一个Customer…一个相当标准的1:M关系

我没有在数据库上配置级联规则,在我的实体数据模型中,OnDeletes设置为None。这意味着不允许删除有订单的客户

我的问题是,当应用程序中的用户删除客户(可能有订单)时,我希望捕获通过强制外键约束引发的异常。对于一个有33个订单的特定客户,我得到InvalidOperationException,但对于另一个只有2个订单的客户,我得到UpdateException。EF让第二条delete语句进入数据库,数据库返回EF生成UPDATEEException的错误。在第一个场景中,EF甚至不让delete语句进入数据库,它只是说这将是无效的,因为Customer的这个实体实例包含订单


有人能解释为什么会发生这种行为吗?

可能有两种不同的例外情况,因为有两层应用了此检查。首先,如果您将一个对象标记为已删除并执行
SaveChanges
EF将检查其内部存储,其中跟踪所有加载的对象。如果EF发现与已删除客户相关的任何跟踪订单也未标记为已删除,则将触发异常(可能是
invalidooperationexception
)。如果没有跟踪的相关订单,EF将在FK关系触发错误的数据库中执行删除操作。此错误由EF捕获,异常是throwm(可能是
UpdateException
与内部数据库相关的异常)