我在实体框架中删除了一个问题。简而言之,EF明确地试图从数据库中删除一个实体,即使我已经明确地配置了EF来使用数据库中的级联删除。使用实体框架级联删除 - 由EF删除的相关实体
我的设计:
我有三个实体类型,MainEntity
,EntityTypeA
和EntityTypeB
。在删除EntityTypeA
和EntityTypeB
时,EF已配置为使用级联删除。换句话说,如果我删除了一个MainEntity
的实例,我希望所有相关的EntityTypeA
和EntityTypeB
实例也被删除。我从不删除EntityTypeA
或EntityTypeB
而不删除其父母。
我的问题是,EF明确地发出DELETE
声明EntityTypeA
,这导致我的应用程序崩溃。
这是我的模型是什么样子:
的关系具有以下非默认配置:
MainEntity -> EntityTypeA OnDelete: Cascade
MainEntity -> EntityTypeB OnDelete: Cascade
的关系EntityTypeA -> EntityTypeB
有OnDelete: None
数据库内容
INSERT INTO MainEntities (Name) values ('Test')
insert into EntityTypeA (MainEntityID) VALUES (1)
insert into EntityTypeB (MainEntityID, EntityTypeAId) VALUES (1, 1)
insert into EntityTypeB (MainEntityID, EntityTypeAId) VALUES (1, 1)
我的代码:
class Program
{
static void Main(string[] args)
{
var context = new Model1Container();
var mainEntity = context.MainEntities.Include("EntityTypeA").SingleOrDefault();
context.DeleteObject(mainEntity);
context.SaveChanges();
}
}
当我打电话的SaveChanges,实体框架会发生什么
在数据库中执行以下操作:
exec sp_executesql N'delete [dbo].[EntityTypeA]
where ([Id] = @0)',N'@0 int',@0=1
这将导致外键冲突,因为在EntityTypeB的表引用EntityTypeA实例项目。
问题
为什么实体框架的问题一个明确的删除EntityTypeA的情况下,即使我已经配置实体框架使用级联删除?如果我删除包含(“EntityTypeA”),它会再次开始工作。
图像(模型的)是不可用的 – flipchart 2014-02-25 06:27:08